| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package core
- import (
- "fmt"
- "mtp20_assisted/global"
- "mtp20_assisted/utils"
- "os"
- "time"
- "go.uber.org/zap"
- "go.uber.org/zap/zapcore"
- )
- type _zap struct{}
- // GetEncoder 获取 zapcore.Encoder
- func (z *_zap) GetEncoder() zapcore.Encoder {
- if global.M2A_CONFIG.Zap.Format == "json" {
- return zapcore.NewJSONEncoder(z.GetEncoderConfig())
- }
- return zapcore.NewConsoleEncoder(z.GetEncoderConfig())
- }
- // GetEncoderConfig 获取zapcore.EncoderConfig
- func (z *_zap) GetEncoderConfig() zapcore.EncoderConfig {
- return zapcore.EncoderConfig{
- MessageKey: "message",
- LevelKey: "level",
- TimeKey: "time",
- NameKey: "logger",
- CallerKey: "caller",
- StacktraceKey: global.M2A_CONFIG.Zap.StacktraceKey,
- LineEnding: zapcore.DefaultLineEnding,
- EncodeLevel: global.M2A_CONFIG.Zap.ZapEncodeLevel(),
- EncodeTime: z.CustomTimeEncoder,
- EncodeDuration: zapcore.SecondsDurationEncoder,
- EncodeCaller: zapcore.FullCallerEncoder,
- }
- }
- // GetEncoderCore 获取Encoder的 zapcore.Core
- func (z *_zap) GetEncoderCore(l zapcore.Level, level zap.LevelEnablerFunc) zapcore.Core {
- writer, err := FileRotatelogs.GetWriteSyncer(l.String()) // 使用file-rotatelogs进行日志分割
- if err != nil {
- fmt.Printf("Get Write Syncer Failed err:%v", err.Error())
- return nil
- }
- return zapcore.NewCore(z.GetEncoder(), writer, level)
- }
- // CustomTimeEncoder 自定义日志输出时间格式
- func (z *_zap) CustomTimeEncoder(t time.Time, encoder zapcore.PrimitiveArrayEncoder) {
- encoder.AppendString(t.Format(global.M2A_CONFIG.Zap.Prefix + "2006/01/02 - 15:04:05.000"))
- }
- // GetZapCores 根据配置文件的Level获取 []zapcore.Core
- func (z *_zap) GetZapCores() []zapcore.Core {
- cores := make([]zapcore.Core, 0, 7)
- for level := global.M2A_CONFIG.Zap.TransportLevel(); level <= zapcore.FatalLevel; level++ {
- cores = append(cores, z.GetEncoderCore(level, z.GetLevelPriority(level)))
- }
- return cores
- }
- // GetLevelPriority 根据 zapcore.Level 获取 zap.LevelEnablerFunc
- func (z *_zap) GetLevelPriority(level zapcore.Level) zap.LevelEnablerFunc {
- switch level {
- case zapcore.DebugLevel:
- return func(level zapcore.Level) bool { // 调试级别
- return level == zap.DebugLevel
- }
- case zapcore.InfoLevel:
- return func(level zapcore.Level) bool { // 日志级别
- return level == zap.InfoLevel
- }
- case zapcore.WarnLevel:
- return func(level zapcore.Level) bool { // 警告级别
- return level == zap.WarnLevel
- }
- case zapcore.ErrorLevel:
- return func(level zapcore.Level) bool { // 错误级别
- return level == zap.ErrorLevel
- }
- case zapcore.DPanicLevel:
- return func(level zapcore.Level) bool { // dpanic级别
- return level == zap.DPanicLevel
- }
- case zapcore.PanicLevel:
- return func(level zapcore.Level) bool { // panic级别
- return level == zap.PanicLevel
- }
- case zapcore.FatalLevel:
- return func(level zapcore.Level) bool { // 终止级别
- return level == zap.FatalLevel
- }
- default:
- return func(level zapcore.Level) bool { // 调试级别
- return level == zap.DebugLevel
- }
- }
- }
- // Zap 获取 zap.Logger
- func Zap() (logger *zap.Logger) {
- if ok, _ := utils.PathExists(global.M2A_CONFIG.Zap.Director); !ok { // 判断是否有Director文件夹
- fmt.Printf("create %v directory\n", global.M2A_CONFIG.Zap.Director)
- _ = os.Mkdir(global.M2A_CONFIG.Zap.Director, os.ModePerm)
- }
- z := new(_zap)
- cores := z.GetZapCores()
- logger = zap.New(zapcore.NewTee(cores...))
- if global.M2A_CONFIG.Zap.ShowLine {
- logger = logger.WithOptions(zap.AddCaller())
- }
- return logger
- }
|