在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
自动处理归档。