1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package config
- import (
- "go.uber.org/zap/zapcore"
- "time"
- )
- type Zap struct {
- Level string `mapstructure:"level" json:"level" yaml:"level"` // 级别
- Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` // 日志前缀
- Format string `mapstructure:"format" json:"format" yaml:"format"` // 输出
- Director string `mapstructure:"director" json:"director" yaml:"director"` // 日志文件夹
- EncodeLevel string `mapstructure:"encode-level" json:"encode-level" yaml:"encode-level"` // 编码级
- StacktraceKey string `mapstructure:"stacktrace-key" json:"stacktrace-key" yaml:"stacktrace-key"` // 栈名
- ShowLine bool `mapstructure:"show-line" json:"show-line" yaml:"show-line"` // 显示行
- LogInConsole bool `mapstructure:"log-in-console" json:"log-in-console" yaml:"log-in-console"` // 输出控制台
- RetentionDay int `mapstructure:"retention-day" json:"retention-day" yaml:"retention-day"` // 日志保留天数
- }
- // Levels 根据字符串转化为 zapcore.Levels
- func (c *Zap) Levels() []zapcore.Level {
- levels := make([]zapcore.Level, 0, 7)
- level, err := zapcore.ParseLevel(c.Level)
- if err != nil {
- level = zapcore.DebugLevel
- }
- for ; level <= zapcore.FatalLevel; level++ {
- levels = append(levels, level)
- }
- return levels
- }
- func (c *Zap) Encoder() zapcore.Encoder {
- config := zapcore.EncoderConfig{
- TimeKey: "time",
- NameKey: "name",
- LevelKey: "level",
- CallerKey: "caller",
- MessageKey: "message",
- StacktraceKey: c.StacktraceKey,
- LineEnding: zapcore.DefaultLineEnding,
- EncodeTime: func(t time.Time, encoder zapcore.PrimitiveArrayEncoder) {
- encoder.AppendString(c.Prefix + t.Format("2006-01-02 15:04:05.000"))
- },
- EncodeLevel: c.LevelEncoder(),
- EncodeCaller: zapcore.FullCallerEncoder,
- EncodeDuration: zapcore.SecondsDurationEncoder,
- }
- if c.Format == "json" {
- return zapcore.NewJSONEncoder(config)
- }
- return zapcore.NewConsoleEncoder(config)
- }
- // LevelEncoder 根据 EncodeLevel 返回 zapcore.LevelEncoder
- // Author [SliverHorn](https://github.com/SliverHorn)
- func (c *Zap) LevelEncoder() zapcore.LevelEncoder {
- switch {
- case c.EncodeLevel == "LowercaseLevelEncoder": // 小写编码器(默认)
- return zapcore.LowercaseLevelEncoder
- case c.EncodeLevel == "LowercaseColorLevelEncoder": // 小写编码器带颜色
- return zapcore.LowercaseColorLevelEncoder
- case c.EncodeLevel == "CapitalLevelEncoder": // 大写编码器
- return zapcore.CapitalLevelEncoder
- case c.EncodeLevel == "CapitalColorLevelEncoder": // 大写编码器带颜色
- return zapcore.CapitalColorLevelEncoder
- default:
- return zapcore.LowercaseLevelEncoder
- }
- }
|