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 协议》,转载必须注明作者和本文链接