logger.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package logger
  2. import (
  3. "os"
  4. "path/filepath"
  5. "time"
  6. "go.uber.org/zap"
  7. "go.uber.org/zap/zapcore"
  8. "gopkg.in/natefinch/lumberjack.v2"
  9. )
  10. var log *zap.Logger
  11. var atomicLevel zap.AtomicLevel
  12. func Debug(msg string, fields ...zap.Field) {
  13. log.Debug(msg, fields...)
  14. }
  15. func Info(msg string, fields ...zap.Field) {
  16. log.Info(msg, fields...)
  17. }
  18. func Warn(msg string, fields ...zap.Field) {
  19. log.Warn(msg, fields...)
  20. }
  21. func Error(msg string, fields ...zap.Field) {
  22. log.Error(msg, fields...)
  23. }
  24. func DPanic(msg string, fields ...zap.Field) {
  25. log.DPanic(msg, fields...)
  26. }
  27. func Panic(msg string, fields ...zap.Field) {
  28. log.Panic(msg, fields...)
  29. }
  30. func Fatal(msg string, fields ...zap.Field) {
  31. log.Fatal(msg, fields...)
  32. }
  33. func Sync() {
  34. log.Sync()
  35. }
  36. func SetLogLevel(level int) {
  37. atomicLevel.SetLevel(zapcore.Level(level))
  38. }
  39. func init() {
  40. hook := lumberjack.Logger{
  41. Filename: filepath.Join(os.TempDir(), "nps.log"),
  42. MaxSize: 128,
  43. MaxBackups: 30,
  44. MaxAge: 7,
  45. Compress: true,
  46. }
  47. encoderConfig := zap.NewDevelopmentEncoderConfig()
  48. encoderConfig.TimeKey = "log_time"
  49. encoderConfig.LevelKey = "level"
  50. encoderConfig.NameKey = "logger"
  51. encoderConfig.CallerKey = "caller"
  52. encoderConfig.MessageKey = "msg"
  53. encoderConfig.StacktraceKey = "StacktraceKey"
  54. encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
  55. enc.AppendString(t.Format("2006-01-02 15:04:05"))
  56. }
  57. consoleConfig := encoderConfig
  58. consoleConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
  59. atomicLevel = zap.NewAtomicLevel()
  60. // init info level
  61. atomicLevel.SetLevel(zapcore.Level(-1))
  62. core := zapcore.NewTee(
  63. zapcore.NewCore(zapcore.NewJSONEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(&hook)), atomicLevel),
  64. zapcore.NewCore(zapcore.NewConsoleEncoder(consoleConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), atomicLevel),
  65. )
  66. caller := zap.AddCaller()
  67. development := zap.Development()
  68. log = zap.New(core, caller, development, zap.AddCallerSkip(1), zap.AddStacktrace(zap.ErrorLevel))
  69. defer log.Sync()
  70. undo := zap.ReplaceGlobals(log)
  71. defer undo()
  72. logLevelSignal()
  73. }