在Linux系统中,使用Golang编写的应用程序可以通过配置日志库来实现日志轮转。以下是使用流行的日志库logrus和zap的示例。
首先,确保已经安装了logrus库:
go get github.com/sirupsen/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.Fatal(err)
}
// 配置日志轮转
logrus.SetOutput(logFile)
logrus.SetReportCaller(true)
// 使用logrus的钩子实现日志轮转
hook := logrus.NewHook(logrus.WriterLevelFilterHook{
Levels: []logrus.Level{logrus.InfoLevel, logrus.WarnLevel, logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel},
Writer: logFile,
})
logrus.AddHook(hook)
// 示例日志
logrus.Info("This is an info message")
logrus.Warn("This is a warning message")
logrus.Error("This is an error message")
// 每天轮转日志
ticker := time.NewTicker(24 * time.Hour)
go func() {
for range ticker.C {
logrus.Info("Rotating logs...")
logFile.Close()
os.Rename("logs/app.log", "logs/app-"+time.Now().Format("2006-01-02")+".log")
logFile, err = os.OpenFile("logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
logrus.Fatal(err)
}
logrus.SetOutput(logFile)
}
}()
// 阻塞主线程
select {}
}
首先,确保已经安装了zap库:
go get go.uber.org/zap
然后,在代码中配置日志轮转:
package main
import (
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"os"
"time"
)
func main() {
// 创建一个日志轮转文件
logFile, err := os.OpenFile("logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
// 配置日志轮转
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
zapcore.AddSync(logFile),
zap.InfoLevel,
)
logger := zap.New(core)
defer logger.Sync()
// 示例日志
logger.Info("This is an info message")
logger.Warn("This is a warning message")
logger.Error("This is an error message")
// 每天轮转日志
ticker := time.NewTicker(24 * time.Hour)
go func() {
for range ticker.C {
logger.Info("Rotating logs...")
logFile.Close()
os.Rename("logs/app.log", "logs/app-"+time.Now().Format("2006-01-02")+".log")
logFile, err = os.OpenFile("logs/app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
core.SetWriteSyncers(zapcore.AddSync(logFile))
}
}()
// 阻塞主线程
select {}
}
这两个示例都会在每天午夜创建一个新的日志文件,并将旧的日志文件重命名为app-YYYY-MM-DD.log。你可以根据需要调整轮转策略。