package utils import ( "os" "time" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) // Logger 保留给 utils 内旧代码使用;新代码请用 pkg.local/log。 var Logger = zap.NewNop().Sugar() var CronLogger *zap.SugaredLogger func InitCronLog() { encoder := zapcore.NewConsoleEncoder(zapcore.EncoderConfig{ MessageKey: "msg", LevelKey: "level", EncodeLevel: zapcore.LowercaseColorLevelEncoder, TimeKey: "ts", EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format("2006-01-02 15:04:05")) }, CallerKey: "file", EncodeCaller: zapcore.ShortCallerEncoder, EncodeDuration: func(d time.Duration, enc zapcore.PrimitiveArrayEncoder) { enc.AppendInt64(int64(d) / 1000000) }, }) fileEncoderConfig := zapcore.EncoderConfig{ TimeKey: "time", LevelKey: "level", CallerKey: "caller", MessageKey: "msg", EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) { enc.AppendString(t.Format("2006-01-02 15:04:05")) }, EncodeLevel: zapcore.LowercaseLevelEncoder, EncodeCaller: zapcore.ShortCallerEncoder, ConsoleSeparator: " ", } fileEncoder := zapcore.NewConsoleEncoder(fileEncoderConfig) infoLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zapcore.InfoLevel }) errorLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zapcore.ErrorLevel }) fatalLevel := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { return lvl >= zapcore.FatalLevel }) path := GetConfigString("log.path") errorFile := GetConfigString("log.errorFile") infoFile := GetConfigString("log.infoFile") errorWriter := cronWriter(path + "/cron-" + errorFile) fatalWriter := cronWriter(path + "/cron-" + errorFile) infoWriter := cronWriter(path + "/cron-" + infoFile) core := zapcore.NewTee( zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), infoLevel), zapcore.NewCore(fileEncoder, fatalWriter, fatalLevel), zapcore.NewCore(fileEncoder, errorWriter, errorLevel), zapcore.NewCore(fileEncoder, infoWriter, infoLevel), ) CronLogger = zap.New(core, zap.AddCaller()).Sugar() } func cronWriter(filename string) zapcore.WriteSyncer { return zapcore.AddSync(&lumberjack.Logger{ Filename: filename, MaxSize: GetConfigInt("log.maxSize"), MaxBackups: GetConfigInt("log.maxBackups"), MaxAge: GetConfigInt("log.maxAge"), Compress: false, LocalTime: true, }) }