ldap-1-backend/public/common/logger.go

112 lines
4.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package common
import (
"fmt"
"os"
"time"
"github.com/eryajf/go-ldap-admin/config"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
"gopkg.in/natefinch/lumberjack.v2"
)
// 全局日志变量
//var Log *zap.Logger
var Log *zap.SugaredLogger
/**
* 初始化日志
* filename 日志文件路径
* level 日志级别
* maxSize 每个日志文件保存的最大尺寸 单位M
* maxBackups 日志文件最多保存多少个备份
* maxAge 文件最多保存多少天
* compress 是否压缩
* serviceName 服务名
* 由于zap不具备日志切割功能, 这里使用lumberjack配合
*/
func InitLogger() {
now := time.Now()
infoLogFileName := fmt.Sprintf("%s/info/%04d-%02d-%02d.log", config.Conf.Logs.Path, now.Year(), now.Month(), now.Day())
errorLogFileName := fmt.Sprintf("%s/error/%04d-%02d-%02d.log", config.Conf.Logs.Path, now.Year(), now.Month(), now.Day())
var coreArr []zapcore.Core
// 获取编码器
//encoderConfig := zap.NewProductionEncoderConfig()
//encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder // 指定时间格式
//encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder // 不需要的话取值zapcore.CapitalLevelEncoder就可以了
////encoderConfig.EncodeCaller = zapcore.FullCallerEncoder // 显示完整文件路径
encoderConfig := zapcore.EncoderConfig{
MessageKey: "msg",
LevelKey: "level",
TimeKey: "time",
NameKey: "name",
CallerKey: "file",
FunctionKey: "func",
StacktraceKey: "stacktrace",
LineEnding: zapcore.DefaultLineEnding,
EncodeLevel: zapcore.CapitalLevelEncoder,
EncodeTime: func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
enc.AppendString(t.Format("2006-01-02 15:04:05"))
},
//EncodeTime: zapcore.ISO8601TimeEncoder, // ISO8601 UTC 时间格式
//EncodeDuration: func(d time.Duration, enc zapcore.PrimitiveArrayEncoder) {
// enc.AppendInt64(int64(d) / 1000000)
//},
EncodeDuration: zapcore.SecondsDurationEncoder,
EncodeCaller: zapcore.ShortCallerEncoder,
//EncodeCaller: zapcore.FullCallerEncoder,
//EncodeName: nil,
//ConsoleSeparator: "",
}
encoder := zapcore.NewConsoleEncoder(encoderConfig)
// 日志级别
highPriority := zap.LevelEnablerFunc(func(level zapcore.Level) bool {
return level >= zap.ErrorLevel
})
lowPriority := zap.LevelEnablerFunc(func(level zapcore.Level) bool {
return level < zap.ErrorLevel && level >= zap.DebugLevel
})
// 当yml配置中的等级大于Error时lowPriority级别日志停止记录
if config.Conf.Logs.Level >= 2 {
lowPriority = zap.LevelEnablerFunc(func(level zapcore.Level) bool {
return false
})
}
// info文件writeSyncer
infoFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
Filename: infoLogFileName, //日志文件存放目录,如果文件夹不存在会自动创建
MaxSize: config.Conf.Logs.MaxSize, //文件大小限制,单位MB
MaxAge: config.Conf.Logs.MaxAge, //日志文件保留天数
MaxBackups: config.Conf.Logs.MaxBackups, //最大保留日志文件数量
LocalTime: false,
Compress: config.Conf.Logs.Compress, //是否压缩处理
})
// 第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志
infoFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(infoFileWriteSyncer, zapcore.AddSync(os.Stdout)), lowPriority)
// error文件writeSyncer
errorFileWriteSyncer := zapcore.AddSync(&lumberjack.Logger{
Filename: errorLogFileName, //日志文件存放目录
MaxSize: config.Conf.Logs.MaxSize, //文件大小限制,单位MB
MaxAge: config.Conf.Logs.MaxAge, //日志文件保留天数
MaxBackups: config.Conf.Logs.MaxBackups, //最大保留日志文件数量
LocalTime: false,
Compress: config.Conf.Logs.Compress, //是否压缩处理
})
// 第三个及之后的参数为写入文件的日志级别,ErrorLevel模式只记录error级别的日志
errorFileCore := zapcore.NewCore(encoder, zapcore.NewMultiWriteSyncer(errorFileWriteSyncer, zapcore.AddSync(os.Stdout)), highPriority)
coreArr = append(coreArr, infoFileCore)
coreArr = append(coreArr, errorFileCore)
logger := zap.New(zapcore.NewTee(coreArr...), zap.AddCaller())
Log = logger.Sugar()
Log.Info("初始化zap日志完成!")
}