下面的轮换日志代码:
package main
import (
"os"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
lumberjack "gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logPath, _ := os.Getwd()
log := NewLoggerFp(logPath, 1, 2, 2)
log.Infof("sjkshfjsdfn")
log.Infof("sjkshfjsdfn")
log.Infof("sjkshfjsdfn")
}
func NewLoggerFp(logPath string, maxSize, maxBackUp, maxAge int) *zap.SugaredLogger {
w := zapcore.AddSync(&lumberjack.Logger{
Filename: logPath + "/dump.log",
MaxSize: maxSize, // megabytes
MaxBackups: maxBackUp,
MaxAge: maxAge, // days
})
core := zapcore.NewCore(
zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()),
w,
zap.InfoLevel,
)
return zap.New(core).Sugar()
}
创建日志如何将时间戳添加到dump.log
?
我试图理解克里斯蒂安的建议。也许你可以试试这个。
w := zapcore.AddSync(&lumberjack.Logger{
Filename: logPath + fmt.Sprintf("/dump-%v.log", time.Now().Format(time.RFC822)),
MaxSize: maxSize, // megabytes
MaxBackups: maxBackUp,
MaxAge: maxAge, // days
})
您是否使用较小的MaxSize(或MaxAge(参数进行了测试?
根据https://pkg.go.dev/gopkg.in/natefinch/lumberjack.v2#example-记录器。旋转,如果第一个文件存在并且小于MaxSize兆字节,Lumberjack将附加到该文件。当达到此限制时,会自动添加时间戳:
每当写入会导致当前日志文件超过MaxSize兆字节时,就会关闭、重命名当前文件,并使用原始名称创建新的日志文件。
备份使用给Logger的日志文件名,格式为
name-timestamp.ext
,其中name是不带扩展名的文件名,timestamp是日志随时间旋转格式化的时间。2006-01-02T15-04-05.000
的时间格式,扩展名为原始扩展名。例如,如果您的Logger。文件名为
/var/log/foo/server.log
,2016年11月11日下午6:30创建的备份将使用文件名/var/log/foo/server-2016-11-04T18-30-00.000.log
如果文件存在并且其大小为>=MaxSize兆字节,通过将当前时间放在文件扩展名前的名称中的时间戳中(如果没有扩展名,则放在文件名末尾(来重命名文件。然后使用原始文件名创建一个新的日志文件。
有一个打开的拉取请求,可以自定义时间戳格式:https://github.com/natefinch/lumberjack/pull/118