广汽安道拓Acura项目MES后台
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.

113 lines
3.5 KiB

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