使用Lumberjack+zap进行日志切割归档操作

时间:2021-05-22

使用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") }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章