liujiandao
2024-03-29 c7b298c3d2bd922df7514f8a5ca37a0c7f6e5686
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package internal
 
import (
    "fmt"
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "srm/global"
    "time"
)
 
var Zap = new(_zap)
 
type _zap struct{}
 
// GetEncoder 获取 zapcore.Encoder
// Author [SliverHorn](https://github.com/SliverHorn)
func (z *_zap) GetEncoder() zapcore.Encoder {
    if global.GVA_CONFIG.Zap.Format == "json" {
        return zapcore.NewJSONEncoder(z.GetEncoderConfig())
    }
    return zapcore.NewConsoleEncoder(z.GetEncoderConfig())
}
 
// GetEncoderConfig 获取zapcore.EncoderConfig
// Author [SliverHorn](https://github.com/SliverHorn)
func (z *_zap) GetEncoderConfig() zapcore.EncoderConfig {
    return zapcore.EncoderConfig{
        MessageKey:     "message",
        LevelKey:       "level",
        TimeKey:        "time",
        NameKey:        "logger",
        CallerKey:      "caller",
        StacktraceKey:  global.GVA_CONFIG.Zap.StacktraceKey,
        LineEnding:     zapcore.DefaultLineEnding,
        EncodeLevel:    global.GVA_CONFIG.Zap.ZapEncodeLevel(),
        EncodeTime:     z.CustomTimeEncoder,
        EncodeDuration: zapcore.SecondsDurationEncoder,
        EncodeCaller:   zapcore.FullCallerEncoder,
    }
}
 
// GetEncoderCore 获取Encoder的 zapcore.Core
// Author [SliverHorn](https://github.com/SliverHorn)
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 自定义日志输出时间格式
// Author [SliverHorn](https://github.com/SliverHorn)
func (z *_zap) CustomTimeEncoder(t time.Time, encoder zapcore.PrimitiveArrayEncoder) {
    encoder.AppendString(global.GVA_CONFIG.Zap.Prefix + t.Format("2006/01/02 - 15:04:05.000"))
}
 
// GetZapCores 根据配置文件的Level获取 []zapcore.Core
// Author [SliverHorn](https://github.com/SliverHorn)
func (z *_zap) GetZapCores() []zapcore.Core {
    cores := make([]zapcore.Core, 0, 7)
    for level := global.GVA_CONFIG.Zap.TransportLevel(); level <= zapcore.FatalLevel; level++ {
        cores = append(cores, z.GetEncoderCore(level, z.GetLevelPriority(level)))
    }
    return cores
}
 
// GetLevelPriority 根据 zapcore.Level 获取 zap.LevelEnablerFunc
// Author [SliverHorn](https://github.com/SliverHorn)
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
        }
    }
}