golang中按照日期分文件写日志

我们在项目开发过程中常常要写日志,但是日志往往是写到一个文件中,导致日志文件过大,传统的方式是另外起一个日志分隔的服务,这样做当然可以,但是比较繁琐。其实我们通过golang的日志库就可以实现按照日期分文件写日志。

安装zap

go get go.uber.org/zap/zapcore

实现方式

1、定义日志输出目录

var outputDir       = "./logs/"

2、定义 zapcore.WriteSyncer

func getWriter(filename string) io.Writer {
    path := outputDir + filename + ".%Y%m%d" + ".txt"
    hook, err := rotatelogs.New(
        path,
        rotatelogs.WithLinkName(filename),
        rotatelogs.WithMaxAge(time.Hour*24*30),
        rotatelogs.WithRotationTime(time.Hour*24),
    )
    if err != nil {
        panic(err)
    }
    return hook
}

3、定义logger

func initLogger() (*zap.Logger, error) {
    encoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
    writeSync := zapcore.AddSync(getWriter("log"))
    core := zapcore.NewCore(encoder, writeSync, zapcore.DebugLevel)
    logger := zap.New(core, zap.AddCaller())
    return logger, nil
}

4、初始化logger
在主函数中初始化logger

logger, err = initLogger()
    if err != nil {
        panic(err)
    }
    defer func(logger *zap.Logger) {
        _ = logger.Sync()
    }(logger)

5、使用logger
正常调用logger的方法即可。

logger.Info("开始启动文件监测服务")
logger.Fatal(err.Error())
本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!