package zlog import ( "fmt" "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" ) type CoreOption func(encoder zapcore.Encoder) zapcore.Core // WithLogFile 文件输出 // 使用 lumberjack 进行日志轮转 func WithLogFile(level zapcore.Level, fileConfig func(*lumberjack.Logger)) CoreOption { return func(encoder zapcore.Encoder) zapcore.Core { fileLog := &lumberjack.Logger{ Filename: fmt.Sprintf("%s.log", level.String()), // level 日志文件 MaxSize: 10, // 日志文件大小(MB) MaxBackups: 3, // 保留旧日志文件数量 MaxAge: 30, // 保留旧日志天数 } if fileConfig != nil { fileConfig(fileLog) } fileWriter := zapcore.AddSync(fileLog) // 定义日志级别 levelPriority := zap.LevelEnablerFunc(func(lvl zapcore.Level) bool { // return lvl >= level // level 及以上级别 return lvl == level // leve l级别 }) return zapcore.NewCore(encoder, fileWriter, levelPriority) } }