You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.4 KiB

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))
}
}