gpt4 book ai didi

logging - 使用 systemd 在 golang 中旋转日志文件

转载 作者:IT王子 更新时间:2023-10-29 02:11:53 25 4
gpt4 key购买 nike

使用 go 中的默认日志但发现了两个问题,即日志轮换和使用 systemd 运行程序时未打印日志。所以我尝试按如下方式使用库:

https://github.com/alecthomas/log4go
https://github.com/natefinch/lumberjack

log4go

似乎是一个完美的日志记录库,因为它提供了最大尺寸和旋转行。然而,当将 rotate 设置为 true 时,它​​确实创建了新的日志文件,但出现错误,然后应用程序终止。

FileLogWriter("logs/app.log"): Rotate: rename logs/stream.log logs/app.log.2017-05-21.001: The process cannot access the file because it is being used by another process.

配置:

logger:=log4go.NewDefaultLogger(log4go.DEBUG)
logger.AddFilter("log", log4go.FINE, log4go.NewFileLogWriter("/log/app.log", true))
logger.Info("success")

还修改了现有库并将 daily 设置为 true,以便在旋转时在文件上显示日期

伐木 worker

接下来我尝试了这个库。很高兴找到,因为除了添加 struct log 配置之外没什么可做的。运行良好,因为日志文件没有比参数指定的更大,但没有创建新文件的迹象。配置

var PrintLog *log.Logger

func main() {
_ = os.Mkdir(property.AppProperties.Logging.Path, os.ModePerm)
f, e := os.OpenFile(logFile, os.O_WRONLY|os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
if e != nil {
fmt.Printf("error opening file: %v", e)
}
PrintLog = log.New(f, "", log.Ldate|log.Ltime)
l:= &lumberjack.Logger{
Filename: logFile,
MaxSize: 2, // megabytes
MaxBackups: 3,
MaxAge: 20, //days
}
log.SetOutput(l)

}

我哪里漏了?

最佳答案

systemd 的建议是记录到 STDOUT,systemd 会自动为您捕获并存储在日志中,可通过 journalctl -u yourproject.service 访问。它还为您处理日志轮换。

有关更多信息,您可以查看 man journalctlman journald.conf

关于logging - 使用 systemd 在 golang 中旋转日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44104928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com