如何配置uber/zap记录器api将日志附加到指定的文件路径。是否可以使其像滚动文件添加程序(基于文件大小或日期)那样工作而不影响性能?
最佳答案
可以将钩子(Hook)添加到zap记录器,该记录器将条目写入lumberjack(Go的滚动日志)。
一个简单的用法如下所示:
滚动日志:
// remember to call this at app (or scope) exit:
// logger.Close()
var lumlog = &lumberjack.Logger{
Filename: "/tmp/my-zap.log",
MaxSize: 10, // megabytes
MaxBackups: 3, // number of log files
MaxAge: 3, // days
}
zap
兼容钩子(Hook):func lumberjackZapHook(e zapcore.Entry) error {
lumlog.Write([]byte(fmt.Sprintf("%+v", e)))
return nil
}
并像这样使用它:
logger, _ := zap.NewProduction(zap.Hooks(lumberjackZapHook))
编辑1:我不确定这在性能方面是否满足您的要求。那里有很多因素。例如,使用SSD硬盘有很大的不同,甚至可以批量写入某些时间序列数据库。
编辑2:在zap documentation中,它也使用伐木 worker (但不用作钩子(Hook))。