如何为滚动文件系统日志配置uber / zap logger

时间:2017-08-01 14:23:20

标签: logging go filesystems

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

1 个答案:

答案 0 :(得分:1)

可以将一个钩子添加到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兼容的钩子:

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中,它也使用伐木工人(但不是挂钩)。