|
package logger
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
//"github.com/natefinch/lumberjack"
|
|
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
fileLogCoreMap map[string]*zap.Logger
|
|
)
|
|
|
|
type fileDriver struct {
|
|
level int
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewFileDriver(config file, level int) (driver, error) {
|
|
var logCore *zap.Logger
|
|
if fileLogCoreMap == nil {
|
|
fileLogCoreMap = make(map[string]*zap.Logger)
|
|
}
|
|
|
|
mKey := config.Filename + strconv.Itoa(config.MaxAge)
|
|
logCore = fileLogCoreMap[mKey]
|
|
if logCore == nil {
|
|
|
|
//lumberjackLogger := &lumberjack.Logger{
|
|
// Filename: config.Filename,
|
|
// MaxSize: config.MaxSize,
|
|
// MaxAge: config.MaxAge,
|
|
// MaxBackups: config.MaxBackups,
|
|
// Compress: config.Compress,
|
|
//}
|
|
age := time.Hour * 24 * time.Duration(config.MaxAge)
|
|
hook, err := rotatelogs.New(
|
|
config.Filename+".%Y%m%d",
|
|
rotatelogs.WithLinkName(config.Filename),
|
|
rotatelogs.WithMaxAge(age),
|
|
rotatelogs.WithRotationTime(time.Hour*24),
|
|
)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
writeSync := zapcore.AddSync(hook)
|
|
coreEncoder := zap.NewProductionEncoderConfig()
|
|
coreEncoder.EncodeLevel = zapcore.CapitalLevelEncoder
|
|
encoder := zapcore.NewJSONEncoder(coreEncoder)
|
|
core := zapcore.NewCore(encoder, writeSync, zap.DebugLevel)
|
|
logCore = zap.New(core)
|
|
fileLogCoreMap[mKey] = logCore
|
|
}
|
|
return &fileDriver{level, logCore}, nil
|
|
}
|
|
|
|
func (f *fileDriver) Record(message message) {
|
|
if (message.Level == debugLevel || message.Level == DebugLevel) && f.level == debugLevelInt {
|
|
f.logger.Debug(message.Content,
|
|
zap.String("Extra", message.Extra),
|
|
zap.Int("Pid", message.Pid),
|
|
zap.String("Module", message.Module),
|
|
zap.String("Operator", message.Operator),
|
|
zap.String("Caller", message.Caller),
|
|
zap.String("Date", message.Date),
|
|
zap.String("Time", message.Time))
|
|
} else if (message.Level == infoLevel || message.Level == InfoLevel) && f.level <= infoLevelInt {
|
|
f.logger.Info(message.Content,
|
|
zap.String("Extra", message.Extra),
|
|
zap.Int("Pid", message.Pid),
|
|
zap.String("Module", message.Module),
|
|
zap.String("Operator", message.Operator),
|
|
zap.String("Caller", message.Caller),
|
|
zap.String("Date", message.Date),
|
|
zap.String("Time", message.Time))
|
|
} else if (message.Level == warnLevel || message.Level == WarnLevel) && f.level <= warnLevelInt {
|
|
f.logger.Warn(message.Content,
|
|
zap.String("Extra", message.Extra),
|
|
zap.Int("Pid", message.Pid),
|
|
zap.String("Module", message.Module),
|
|
zap.String("Operator", message.Operator),
|
|
zap.String("Caller", message.Caller),
|
|
zap.String("Date", message.Date),
|
|
zap.String("Time", message.Time))
|
|
} else if (message.Level == errorLevel || message.Level == ErrorLevel) && f.level <= errorLevelInt {
|
|
f.logger.Error(message.Content,
|
|
zap.String("Extra", message.Extra),
|
|
zap.Int("Pid", message.Pid),
|
|
zap.String("Module", message.Module),
|
|
zap.String("Operator", message.Operator),
|
|
zap.String("Caller", message.Caller),
|
|
zap.String("Date", message.Date),
|
|
zap.String("Time", message.Time))
|
|
} else if (message.Level == fatalLevel || message.Level == FatalLevel) && f.level <= fatalLevelInt {
|
|
f.logger.Fatal(message.Content,
|
|
zap.String("Extra", message.Extra),
|
|
zap.Int("Pid", message.Pid),
|
|
zap.String("Module", message.Module),
|
|
zap.String("Operator", message.Operator),
|
|
zap.String("Caller", message.Caller),
|
|
zap.String("Date", message.Date),
|
|
zap.String("Time", message.Time))
|
|
}
|
|
}
|