logger.go 3.0 KB

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