在Debian系统上使用Golang实现日志的远程传输可以通过多种方式来完成。以下是几种常见的方法:
rsyslog。sudo apt-get update sudo apt-get install rsyslog /etc/rsyslog.conf 或 /etc/rsyslog.d/50-default.conf 文件,添加以下内容以接收远程日志:module(load="imudp") input(type="imudp" port="514") module(load="imtcp") input(type="imtcp" port="514") sudo systemctl restart rsyslog go-syslog 库将日志发送到远程Syslog服务器。go get github.com/RackSec/srslog 在你的Golang代码中:
package main import ( "github.com/RackSec/srslog" "log" ) func main() { logger, err := srslog.NewLogger(srslog.LOG_INFO, "myapp", "udp", "localhost:514") if err != nil { log.Fatalf("Failed to create logger: %v", err) } defer logger.Close() logger.Info("This is an info message") logger.Error("This is an error message") } nginx 或 apache2。sudo apt-get update sudo apt-get install nginx nginx 以接收日志请求。server { listen 80; server_name your_server_ip; location /log { proxy_pass http://localhost:8080/log; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } net/http 库将日志发送到远程HTTP服务器。package main import ( "bytes" "log" "net/http" ) func main() { url := "http://your_server_ip/log" logData := []byte("This is a log message") resp, err := http.Post(url, "application/json", bytes.NewBuffer(logData)) if err != nil { log.Fatalf("Failed to send log: %v", err) } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Fatalf("Failed to send log: status code %d", resp.StatusCode) } } go get github.com/sirupsen/logrus 在你的Golang代码中:
package main import ( "github.com/sirupsen/logrus" "os" ) func main() { logger := logrus.New() logger.SetLevel(logrus.InfoLevel) logger.SetFormatter(&logrus.JSONFormatter{}) logger.SetOutput(os.Stdout) logger.Info("This is a logrus test log") } go get go.uber.org/zap 在你的Golang代码中:
package main import ( "go.uber.org/zap" "go.uber.org/zap/zapcore" ) func main() { logger := zap.NewProduction() defer logger.Sync() // flushes buffer, if any logger.Info("logger construction succeeded") }