zap.go 3.3 KB

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