84 lines
2.4 KiB
Go
84 lines
2.4 KiB
Go
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,
|
|
})
|
|
}
|