You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

108 lines
3.4 KiB

  1. package logger
  2. import (
  3. "strconv"
  4. //"github.com/natefinch/lumberjack"
  5. rotatelogs "github.com/lestrrat-go/file-rotatelogs"
  6. "go.uber.org/zap"
  7. "go.uber.org/zap/zapcore"
  8. "time"
  9. )
  10. var (
  11. fileLogCoreMap map[string]*zap.Logger
  12. )
  13. type fileDriver struct {
  14. level int
  15. logger *zap.Logger
  16. }
  17. func NewFileDriver(config file, level int) (driver, error) {
  18. var logCore *zap.Logger
  19. if fileLogCoreMap == nil {
  20. fileLogCoreMap = make(map[string]*zap.Logger)
  21. }
  22. mKey := config.Filename+strconv.Itoa(config.MaxAge)
  23. logCore = fileLogCoreMap[mKey]
  24. if logCore == nil {
  25. //lumberjackLogger := &lumberjack.Logger{
  26. // Filename: config.Filename,
  27. // MaxSize: config.MaxSize,
  28. // MaxAge: config.MaxAge,
  29. // MaxBackups: config.MaxBackups,
  30. // Compress: config.Compress,
  31. //}
  32. age := time.Hour * 24 * time.Duration(config.MaxAge)
  33. hook, err := rotatelogs.New(
  34. config.Filename+".%Y%m%d",
  35. rotatelogs.WithLinkName(config.Filename),
  36. rotatelogs.WithMaxAge(age),
  37. rotatelogs.WithRotationTime(time.Hour*24),
  38. )
  39. if err != nil {
  40. return nil, err
  41. }
  42. writeSync := zapcore.AddSync(hook)
  43. coreEncoder := zap.NewProductionEncoderConfig()
  44. coreEncoder.EncodeLevel = zapcore.CapitalLevelEncoder
  45. encoder := zapcore.NewJSONEncoder(coreEncoder)
  46. core := zapcore.NewCore(encoder, writeSync, zap.DebugLevel)
  47. logCore = zap.New(core)
  48. fileLogCoreMap[mKey] = logCore
  49. }
  50. return &fileDriver{level, logCore}, nil
  51. }
  52. func (f *fileDriver) Record(message message) {
  53. if (message.Level == debugLevel || message.Level == DebugLevel) && f.level == debugLevelInt {
  54. f.logger.Debug(message.Content,
  55. zap.String("Extra", message.Extra),
  56. zap.Int("Pid", message.Pid),
  57. zap.String("Module", message.Module),
  58. zap.String("Operator", message.Operator),
  59. zap.String("Caller", message.Caller),
  60. zap.String("Date", message.Date),
  61. zap.String("Time", message.Time))
  62. } else if (message.Level == infoLevel || message.Level == InfoLevel) && f.level <= infoLevelInt {
  63. f.logger.Info(message.Content,
  64. zap.String("Extra", message.Extra),
  65. zap.Int("Pid", message.Pid),
  66. zap.String("Module", message.Module),
  67. zap.String("Operator", message.Operator),
  68. zap.String("Caller", message.Caller),
  69. zap.String("Date", message.Date),
  70. zap.String("Time", message.Time))
  71. } else if (message.Level == warnLevel || message.Level == WarnLevel) && f.level <= warnLevelInt {
  72. f.logger.Warn(message.Content,
  73. zap.String("Extra", message.Extra),
  74. zap.Int("Pid", message.Pid),
  75. zap.String("Module", message.Module),
  76. zap.String("Operator", message.Operator),
  77. zap.String("Caller", message.Caller),
  78. zap.String("Date", message.Date),
  79. zap.String("Time", message.Time))
  80. } else if (message.Level == errorLevel || message.Level == ErrorLevel) && f.level <= errorLevelInt {
  81. f.logger.Error(message.Content,
  82. zap.String("Extra", message.Extra),
  83. zap.Int("Pid", message.Pid),
  84. zap.String("Module", message.Module),
  85. zap.String("Operator", message.Operator),
  86. zap.String("Caller", message.Caller),
  87. zap.String("Date", message.Date),
  88. zap.String("Time", message.Time))
  89. } else if (message.Level == fatalLevel || message.Level == FatalLevel) && f.level <= fatalLevelInt {
  90. f.logger.Fatal(message.Content,
  91. zap.String("Extra", message.Extra),
  92. zap.Int("Pid", message.Pid),
  93. zap.String("Module", message.Module),
  94. zap.String("Operator", message.Operator),
  95. zap.String("Caller", message.Caller),
  96. zap.String("Date", message.Date),
  97. zap.String("Time", message.Time))
  98. }
  99. }