温馨提示×

CentOS中Golang日志轮转如何配置

小樊
45
2026-01-10 14:27:59
栏目: 编程语言

在CentOS系统中,Golang应用程序的日志轮转可以通过使用第三方库或者系统工具来实现。这里我们将介绍两种方法:使用logrotate系统工具和使用lumberjack库。

方法一:使用logrotate系统工具

  1. 首先,确保你的Golang应用程序将日志输出到文件。例如,你可以使用log包的SetOutput方法将日志输出到文件:
package main

import (
	"log"
	"os"
)

func main() {
	logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	if err != nil {
		log.Fatal(err)
	}
	defer logFile.Close()

	log.SetOutput(logFile)
	log.Println("Hello, World!")
}
  1. 创建一个logrotate配置文件,例如/etc/logrotate.d/myapp,并添加以下内容:
/path/to/your/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 640 root root
}

这个配置表示每天轮转日志文件,保留最近7天的日志,压缩旧日志,如果日志文件不存在则不报错,如果日志文件为空则不轮转,以及设置新日志文件的权限和所有者。

  1. 确保logrotate服务已启用并运行:
sudo systemctl enable logrotate
sudo systemctl start logrotate

现在,你的Golang应用程序的日志将根据logrotate配置进行轮转。

方法二:使用lumberjack

  1. 安装lumberjack库:
go get github.com/natefinch/lumberjack
  1. 在你的Golang应用程序中使用lumberjack库来处理日志轮转。例如:
package main

import (
	"log"
	"github.com/natefinch/lumberjack"
)

func main() {
	log.SetOutput(&lumberjack.Logger{
		Filename:   "/path/to/your/app.log",
		MaxSize:    10, // 每个日志文件的最大大小(以MB为单位)
		MaxBackups: 7,  // 保留的最大日志文件数
		MaxAge:     30, // 保留的最大日志文件天数
		Compress:   true, // 是否压缩旧日志文件
	})
	log.Println("Hello, World!")
}

在这个例子中,我们使用lumberjack.Logger替换了log包的默认输出。lumberjack.Logger的参数包括日志文件的路径、每个日志文件的最大大小、保留的最大日志文件数、保留的最大日志文件天数以及是否压缩旧日志文件。

这样,你的Golang应用程序的日志将根据lumberjack配置进行轮转。

0