zap.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. package core
  2. import (
  3. "fmt"
  4. "mtp20_assisted/global"
  5. "mtp20_assisted/utils"
  6. "os"
  7. "time"
  8. "go.uber.org/zap"
  9. "go.uber.org/zap/zapcore"
  10. )
  11. type _zap struct{}
  12. // GetEncoder 获取 zapcore.Encoder
  13. func (z *_zap) GetEncoder() zapcore.Encoder {
  14. if global.M2A_CONFIG.Zap.Format == "json" {
  15. return zapcore.NewJSONEncoder(z.GetEncoderConfig())
  16. }
  17. return zapcore.NewConsoleEncoder(z.GetEncoderConfig())
  18. }
  19. // GetEncoderConfig 获取zapcore.EncoderConfig
  20. func (z *_zap) GetEncoderConfig() zapcore.EncoderConfig {
  21. return zapcore.EncoderConfig{
  22. MessageKey: "message",
  23. LevelKey: "level",
  24. TimeKey: "time",
  25. NameKey: "logger",
  26. CallerKey: "caller",
  27. StacktraceKey: global.M2A_CONFIG.Zap.StacktraceKey,
  28. LineEnding: zapcore.DefaultLineEnding,
  29. EncodeLevel: global.M2A_CONFIG.Zap.ZapEncodeLevel(),
  30. EncodeTime: z.CustomTimeEncoder,
  31. EncodeDuration: zapcore.SecondsDurationEncoder,
  32. EncodeCaller: zapcore.FullCallerEncoder,
  33. }
  34. }
  35. // GetEncoderCore 获取Encoder的 zapcore.Core
  36. func (z *_zap) GetEncoderCore(l zapcore.Level, level zap.LevelEnablerFunc) zapcore.Core {
  37. writer, err := FileRotatelogs.GetWriteSyncer(l.String()) // 使用file-rotatelogs进行日志分割
  38. if err != nil {
  39. fmt.Printf("Get Write Syncer Failed err:%v", err.Error())
  40. return nil
  41. }
  42. return zapcore.NewCore(z.GetEncoder(), writer, level)
  43. }
  44. // CustomTimeEncoder 自定义日志输出时间格式
  45. func (z *_zap) CustomTimeEncoder(t time.Time, encoder zapcore.PrimitiveArrayEncoder) {
  46. encoder.AppendString(t.Format(global.M2A_CONFIG.Zap.Prefix + "2006/01/02 - 15:04:05.000"))
  47. }
  48. // GetZapCores 根据配置文件的Level获取 []zapcore.Core
  49. func (z *_zap) GetZapCores() []zapcore.Core {
  50. cores := make([]zapcore.Core, 0, 7)
  51. for level := global.M2A_CONFIG.Zap.TransportLevel(); level <= zapcore.FatalLevel; level++ {
  52. cores = append(cores, z.GetEncoderCore(level, z.GetLevelPriority(level)))
  53. }
  54. return cores
  55. }
  56. // GetLevelPriority 根据 zapcore.Level 获取 zap.LevelEnablerFunc
  57. func (z *_zap) GetLevelPriority(level zapcore.Level) zap.LevelEnablerFunc {
  58. switch level {
  59. case zapcore.DebugLevel:
  60. return func(level zapcore.Level) bool { // 调试级别
  61. return level == zap.DebugLevel
  62. }
  63. case zapcore.InfoLevel:
  64. return func(level zapcore.Level) bool { // 日志级别
  65. return level == zap.InfoLevel
  66. }
  67. case zapcore.WarnLevel:
  68. return func(level zapcore.Level) bool { // 警告级别
  69. return level == zap.WarnLevel
  70. }
  71. case zapcore.ErrorLevel:
  72. return func(level zapcore.Level) bool { // 错误级别
  73. return level == zap.ErrorLevel
  74. }
  75. case zapcore.DPanicLevel:
  76. return func(level zapcore.Level) bool { // dpanic级别
  77. return level == zap.DPanicLevel
  78. }
  79. case zapcore.PanicLevel:
  80. return func(level zapcore.Level) bool { // panic级别
  81. return level == zap.PanicLevel
  82. }
  83. case zapcore.FatalLevel:
  84. return func(level zapcore.Level) bool { // 终止级别
  85. return level == zap.FatalLevel
  86. }
  87. default:
  88. return func(level zapcore.Level) bool { // 调试级别
  89. return level == zap.DebugLevel
  90. }
  91. }
  92. }
  93. // Zap 获取 zap.Logger
  94. func Zap() (logger *zap.Logger) {
  95. if ok, _ := utils.PathExists(global.M2A_CONFIG.Zap.Director); !ok { // 判断是否有Director文件夹
  96. fmt.Printf("create %v directory\n", global.M2A_CONFIG.Zap.Director)
  97. _ = os.Mkdir(global.M2A_CONFIG.Zap.Director, os.ModePerm)
  98. }
  99. z := new(_zap)
  100. cores := z.GetZapCores()
  101. logger = zap.New(zapcore.NewTee(cores...))
  102. if global.M2A_CONFIG.Zap.ShowLine {
  103. logger = logger.WithOptions(zap.AddCaller())
  104. }
  105. return logger
  106. }