如何配置 uber-go/zap 记录器来滚动文件系统日志?

joh*_*doe 6 filesystems logging go go-zap

如何配置uber-go/zaplogger api 将日志附加到指定的文件路径。是否可以使其像滚动文件附加器(基于文件大小或日期)一样工作而不影响性能?

Kav*_*ian 8

可以向 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
}
Run Code Online (Sandbox Code Playgroud)

兼容的钩子zap

func lumberjackZapHook(e zapcore.Entry) error {
    lumlog.Write([]byte(fmt.Sprintf("%+v", e)))
    return nil
}
Run Code Online (Sandbox Code Playgroud)

并像这样使用它:

logger, _ := zap.NewProduction(zap.Hooks(lumberjackZapHook))
Run Code Online (Sandbox Code Playgroud)

编辑1:我不确定这是否满足您在性能方面的要求。这里面有很多因素。例如,使用 SSD 硬盘会产生很大的差异,甚至可以通过批量写入登录某些时间序列数据库。

编辑2:在 zap文档中,它也使用 lumberjack (但不是作为钩子)。