1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
package main
import ( "github.com/natefinch/lumberjack" "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" "time" )
var logger *zap.Logger
func initLogger(logPath string, logLevel string, maxSize, maxBackups, maxAge int, compress, jsonFormat, showLine, logInConsole bool) { var level zapcore.Level switch logLevel { case "debug": level = zap.DebugLevel case "info": level = zap.InfoLevel case "warn": level = zap.WarnLevel case "error": level = zap.ErrorLevel default: level = zap.InfoLevel }
var ( syncer zapcore.WriteSyncer customTimeEncoder = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString("[" + t.Format("2006-01-02 15:04:05.000") + "]") } customLevelEncoder = func(level zapcore.Level, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString("[" + level.CapitalString() + "]") } )
hook := lumberjack.Logger{ Filename: logPath, MaxSize: maxSize, MaxBackups: maxBackups, Compress: compress, } if maxAge > 0 { hook.MaxAge = maxAge }
if logInConsole { syncer = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(&hook)) } else { syncer = zapcore.AddSync(&hook) }
encoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", NameKey: "logger", CallerKey: "line", MessageKey: "msg", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeTime: customTimeEncoder, EncodeLevel: customLevelEncoder, EncodeCaller: zapcore.ShortCallerEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeName: zapcore.FullNameEncoder, }
var encoder zapcore.Encoder if jsonFormat { encoder = zapcore.NewJSONEncoder(encoderConfig) } else { encoder = zapcore.NewConsoleEncoder(encoderConfig) }
core := zapcore.NewCore( encoder, syncer, level, )
logger = zap.New(core) if showLine { logger = logger.WithOptions(zap.AddCaller()) } }
|