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 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| package log
import ( "github.com/natefinch/lumberjack" "github.com/sirupsen/logrus" "go.uber.org/zap" "go.uber.org/zap/zapcore" "os" "tikapp/common/config" "time" )
var Logger *zap.Logger
func Init() { if config.AppCfg.RunMode == "debug" { core := zapcore.NewTee( zapcore.NewCore(getEncoder(), zapcore.Lock(os.Stdout), zapcore.DebugLevel), ) Logger = zap.New(core, zap.AddCaller()) } else { fileLog() } }
func fileLog() { debugPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.DebugLevel }) infoPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.InfoLevel }) warnPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.WarnLevel }) errorPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.ErrorLevel }) panicPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.PanicLevel }) fatalPriority := zap.LevelEnablerFunc(func(lev zapcore.Level) bool { return lev == zap.FatalLevel })
cores := [...]zapcore.Core{ getEncoderCore("./debug.log", debugPriority), getEncoderCore("./info.log", infoPriority), getEncoderCore("./warn.log", warnPriority), getEncoderCore("./error.log", errorPriority), getEncoderCore("./panic.log", panicPriority), getEncoderCore("./fatal.log", fatalPriority), }
Logger = zap.New(zapcore.NewTee(cores[:]...), zap.AddCaller()) }
func pathExists(path string) bool { _, err := os.Stat(path) return err == nil || os.IsExist(err) }
func getLogWriter(fileName string) zapcore.WriteSyncer { dir, _ := os.Getwd() sperator0 := os.PathSeparator sperator := string(sperator0) dir = dir + sperator + "runtime" + sperator + "logs" if !pathExists(dir) { err := os.MkdirAll(dir, os.ModePerm) if err != nil { logrus.Warnf("create dir %s failed", dir) } } lumberJackLogger := &lumberjack.Logger{ Filename: dir + sperator + fileName, MaxSize: 5, MaxBackups: 5, MaxAge: 30, Compress: true, } return zapcore.AddSync(lumberJackLogger) }
func getEncoderCore(fileName string, level zapcore.LevelEnabler) (core zapcore.Core) { writer := getLogWriter(fileName) return zapcore.NewCore(getEncoder(), writer, level) }
func getEncoder() zapcore.Encoder { return zapcore.NewConsoleEncoder(getEncoderConfig()) }
func getEncoderConfig() (config zapcore.EncoderConfig) { config = zapcore.EncoderConfig{ MessageKey: "message", LevelKey: "level", TimeKey: "time", NameKey: "logger", CallerKey: "caller", StacktraceKey: "stacktrace", LineEnding: zapcore.DefaultLineEnding, EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeTime: customTimeEncoder, EncodeDuration: zapcore.SecondsDurationEncoder, EncodeCaller: zapcore.ShortCallerEncoder, } return config }
func customTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format(config.LogCfg.TimeFormat)) }
|