在CentOS系統中,使用Golang編寫的應用程序可以通過以下方法實現日志歸檔:
logrus
和zap
。這些庫通常提供了日志輪轉(log rotation)功能,可以在日志文件達到指定大小或時間間隔時自動歸檔。以logrus
為例,您可以這樣實現日志歸檔:
package main
import (
"github.com/sirupsen/logrus"
"os"
"time"
)
func main() {
logrus.SetFormatter(&logrus.JSONFormatter{})
logrus.SetOutput(os.Stdout)
logFile, err := os.OpenFile("logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
logrus.SetOutput(logFile)
} else {
logrus.Info("Failed to log to file, using default stderr")
}
logrus.Info("Starting application...")
// 模擬應用程序運行
for {
logrus.Info("Application is running...")
time.Sleep(1 * time.Second)
}
}
rsyslog
或syslog-ng
),這些服務通常會自動處理日志歸檔。要將Golang應用程序的日志發送到rsyslog
,您可以使用第三方庫,如gosyslog
:
package main
import (
"github.com/RackSec/srs-lib-go/log"
"os"
)
func main() {
log.SetLogger("file", `{"filename":"/var/log/app.log"}`)
log.Info("Starting application...")
// 模擬應用程序運行
for {
log.Info("Application is running...")
}
}
然后,您需要在rsyslog
配置文件(通常位于/etc/rsyslog.conf
或/etc/rsyslog.d/50-default.conf
)中添加以下行,以便將Golang應用程序的日志發送到指定的文件:
*.info;mail.none;authpriv.none;cron.none /var/log/app.log
最后,重啟rsyslog
服務以應用更改:
sudo systemctl restart rsyslog
這樣,您的Golang應用程序的日志將被發送到/var/log/app.log
,并由rsyslog
自動處理歸檔。