在CentOS下,Golang日志归档可以通过以下几种方法实现:
CentOS系统自带logrotate工具,可以用来管理日志文件的归档和压缩。首先,确保logrotate已安装:
sudo yum install logrotate
然后,创建一个logrotate配置文件,例如/etc/logrotate.d/golang-app,并添加以下内容:
/path/to/your/golang/app/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root root
}
这里的配置表示每天归档日志文件,保留最近7天的归档文件,压缩归档文件,如果日志文件不存在则不报错,如果日志文件为空则不归档,创建新的归档文件时设置权限为0640。
最后,确保logrotate配置文件的定时任务已启用:
sudo systemctl enable logrotate
在Golang应用程序中,可以使用第三方日志库(如logrus、zap等)来实现日志归档功能。这些库通常提供了日志级别、日志格式、日志输出和归档等功能。
例如,使用logrus库,可以在Golang应用程序中实现日志归档:
package main
import (
"github.com/sirupsen/logrus"
"os"
"time"
)
func main() {
log := logrus.New()
// 设置日志输出到文件
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
log.Out = file
} else {
log.Info("Failed to log to file, using default stderr")
}
// 设置日志格式
log.SetFormatter(&logrus.TextFormatter{
FullTimestamp: true,
})
// 每天创建一个新的日志文件
go func() {
for {
time.Sleep(24 * time.Hour)
file.Close()
os.Rename("app.log", "app-"+time.Now().Format("2006-01-02")+".log")
file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err == nil {
log.Out = file
}
}
}()
// 示例日志输出
log.Info("Hello, World!")
}
这个示例中,Golang应用程序会将日志输出到app.log文件,并每天创建一个新的日志文件,文件名为app-YYYY-MM-DD.log。
以上两种方法可以根据实际需求选择使用。使用系统自带的logrotate工具更简单,适用于大多数场景;而在Golang应用程序中使用第三方日志库可以提供更多的定制化功能。