logger.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package log
  2. import (
  3. "fmt"
  4. "github.com/natefinch/lumberjack"
  5. "go.uber.org/zap"
  6. "go.uber.org/zap/zapcore"
  7. "time"
  8. )
  9. var Logger *zap.Logger
  10. func InitLogger(logpath string, loglevel string) {
  11. // 日志分割
  12. hook := lumberjack.Logger{
  13. Filename: logpath, // 日志文件路径,默认 os.TempDir()
  14. MaxSize: 200, // 每个日志文件保存10M,默认 100M
  15. MaxBackups: 20, // 保留30个备份,默认不限
  16. MaxAge: 15, // 保留7天,默认不限
  17. Compress: false, // 是否压缩,默认不压缩
  18. }
  19. write := zapcore.AddSync(&hook)
  20. // 设置日志级别
  21. // debug 可以打印出 info debug warn
  22. // info 级别可以打印 warn info
  23. // warn 只能打印 warn
  24. // debug->info->warn->error
  25. var level zapcore.Level
  26. switch loglevel {
  27. case "debug":
  28. level = zap.DebugLevel
  29. case "info":
  30. level = zap.InfoLevel
  31. case "error":
  32. level = zap.ErrorLevel
  33. default:
  34. level = zap.InfoLevel
  35. }
  36. encoderConfig := zapcore.EncoderConfig{
  37. TimeKey: "time",
  38. LevelKey: "level",
  39. NameKey: "logger",
  40. CallerKey: "caller",
  41. MessageKey: "msg",
  42. StacktraceKey: "stacktrace",
  43. LineEnding: zapcore.DefaultLineEnding,
  44. EncodeLevel: zapcore.LowercaseLevelEncoder, // 小写编码器
  45. EncodeTime: formatEncodeTime,
  46. EncodeDuration: zapcore.SecondsDurationEncoder, //
  47. EncodeCaller: zapcore.ShortCallerEncoder, // 全路径编码器
  48. //EncodeName: zapcore.FullNameEncoder,
  49. }
  50. // 设置日志级别
  51. atomicLevel := zap.NewAtomicLevel()
  52. atomicLevel.SetLevel(level)
  53. core := zapcore.NewCore(
  54. // zapcore.NewConsoleEncoder(encoderConfig),
  55. zapcore.NewJSONEncoder(encoderConfig),
  56. //zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)),
  57. //zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(write)), // 打印到控制台和文件
  58. write, //文件
  59. level,
  60. )
  61. // 开启开发模式,堆栈跟踪
  62. caller := zap.AddCaller()
  63. // 开启文件及行号
  64. development := zap.Development()
  65. // 设置初始化字段,如:添加一个服务器名称
  66. //filed := zap.Fields(zap.String("serviceName", "serviceName"))
  67. // 构造日志
  68. Logger = zap.New(core, caller, development)
  69. Logger.Info("DefaultLogger init success")
  70. }
  71. func formatEncodeTime(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
  72. enc.AppendString(fmt.Sprintf("%d-%02d-%02d %02d:%02d:%02d", t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second()))
  73. }
  74. func Field(key string, val interface{}) zap.Field {
  75. return zap.Any(key, val)
  76. }