我正在使用logrus包进行日志记录。想要每天轮换日志。
我已经探索了像伐木工人和logrotate(8)这样的选项
但是伐木工人根据日志文件的大小提供日志轮换。不确定是否有任何方法可以让它每天轮换日志。
对于 logrotate,我将不得不在系统级别创建一个单独的配置,我想避免这样做,因为必须照顾两个不同的事情,并且可扩展性将成为一个问题。不确定我们如何仅通过在项目级别创建配置或其他更好的方法来使用它。
那么有没有办法在 Golang 中每天进行日志轮换?
您可以尝试来自Krzysztof Kowalczyk的kjk/dailyrotate,在“什么是dailyrotate? ”中进行了介绍。
dailyrotate 是一个 Go 库,可以轻松实现日志轮换。
默认情况下,日志每天在 UTC 时间午夜轮换。
var (
logFile *dailyrotate.File
)
func openLogFile(pathFormat string, onClose func(string, bool)) error {
w, err := dailyrotate.NewFile(pathFormat, onLogClose)
if err != nil {
return err
}
logFile = w
return nil
}
func main() {
logDir := "logs"
// we have to ensure the directory we want to write to
// already exists
err := os.MkdirAll(logDir, 0755)
if err != nil {
log.Fatalf("os.MkdirAll()(")
}
pathFormat := filepath.Join(logDir, "2006-01-02.txt")
err = openLogFile(pathFormat, onLogClose)
if err != nil {
log.Fatalf("openLogFile failed with '%s'\n", err)
}
// ... the rest of your program
}