使用Lumberjack+zap进行日志切割归档
为了添加日志切割归档功能,我们将使用第三方库Lumberjack来实现。
安装
执行下面的命令安装Lumberjack
go get -u github.com/natefinch/lumberjack
zap logger中加入Lumberjack
要在zap中加入Lumberjack支持,我们需要修改WriteSyncer代码。我们将按照下面的代码修改getLogWriter()函数:
func getLogWriter() zapcore.WriteSyncer { lumberJackLogger := &lumberjack.Logger{ Filename: "./test.log", MaxSize: 10, MaxBackups: 5, MaxAge: 30, Compress: false, } return zapcore.AddSync(&lumberJackLogger)}Lumberjack Logger采用以下属性作为输入:
Filename: 日志文件的位置
MaxSize:在进行切割之前,日志文件的最大大小(以MB为单位)
MaxBackups:保留旧文件的最大个数
MaxAges:保留旧文件的最大天数
Compress:是否压缩/归档旧文件
测试所有功能
package mainimport ( "net/http" "go.uber.org/zap" "go.uber.org/zap/zapcore" lumberjack "gopkg.in/natefinch/lumberjack.v2")var sugarLogger *zap.SugaredLoggerfunc main() { InitLogger() defer sugarLogger.Sync() for i:=0; i < 10000;i++ { simpleHttpGet("press: true, }) encoder := zap.NewProductionEncoderConfig() encoder.EncodeTime = zapcore.ISO8601TimeEncoder core := zapcore.NewCore(zapcore.NewJSONEncoder(encoder), syncWriter, zap.NewAtomicLevelAt(level)) logger := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1)) errorLogger = logger.Sugar()} func Debug(args ...interface{}) { errorLogger.Debug(args...)} func Debugf(template string, args ...interface{}) { errorLogger.Debugf(template, args...)} func Info(args ...interface{}) { errorLogger.Info(args...)} func Infof(template string, args ...interface{}) { errorLogger.Infof(template, args...)} func Warn(args ...interface{}) { errorLogger.Warn(args...)} func Warnf(template string, args ...interface{}) { errorLogger.Warnf(template, args...)} func Error(args ...interface{}) { errorLogger.Error(args...)} func Errorf(template string, args ...interface{}) { errorLogger.Errorf(template, args...)} func DPanic(args ...interface{}) { errorLogger.DPanic(args...)} func DPanicf(template string, args ...interface{}) { errorLogger.DPanicf(template, args...)} func Panic(args ...interface{}) { errorLogger.Panic(args...)} func Panicf(template string, args ...interface{}) { errorLogger.Panicf(template, args...)} func Fatal(args ...interface{}) { errorLogger.Fatal(args...)} func Fatalf(template string, args ...interface{}) { errorLogger.Fatalf(template, args...)}3.简单封装后使用示例:
package main import ( "logger") func main() { logger.Infof("simple zap logger example") }以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。