log.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package zaplog
  2. import (
  3. "fmt"
  4. "kpt-tmr-group/pkg/tool"
  5. "path"
  6. "runtime"
  7. "time"
  8. "github.com/natefinch/lumberjack"
  9. "go.uber.org/zap"
  10. "go.uber.org/zap/zapcore"
  11. )
  12. var (
  13. Logger *zap.Logger
  14. logFileName = fmt.Sprintf("./logger/zap-%s.log", time.Now().Format(tool.DateTime))
  15. )
  16. func init() {
  17. encoderConfig := zap.NewDevelopmentEncoderConfig()
  18. // 设置日志时间格式
  19. encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
  20. // 日志encoder 还是json encode,把日志进行格式化json格式的
  21. encoder := zapcore.NewJSONEncoder(encoderConfig)
  22. // topicErrors := zapcore.AddSync(ioutil.Discard) //kafka topic
  23. fileWriteSyncer := getFileLogWriter(logFileName)
  24. core := zapcore.NewTee(
  25. // zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel), // 打印到控制台
  26. // zapcore.NewCore(zapcore.NewJSONEncoder(zap.NewProductionEncoderConfig()), topicErrors, zapcore.ErrorLevel), // 打印到kafka 待验证
  27. zapcore.NewCore(encoder, fileWriteSyncer, zapcore.DebugLevel), // 打印到指定的日志文件
  28. )
  29. Logger = zap.New(core)
  30. }
  31. func getFileLogWriter(logFileName string) zapcore.WriteSyncer {
  32. lumberJackLogger := &lumberjack.Logger{
  33. Filename: logFileName,
  34. MaxSize: 100, // 单个文件最大100M
  35. MaxBackups: 10, // 大于60个日志文件后,清理比较旧的日志文件
  36. MaxAge: 1, // 一天切割1次
  37. Compress: false,
  38. }
  39. return zapcore.AddSync(lumberJackLogger)
  40. }
  41. func getCallerInfoForLog() (callerFields []zap.Field) {
  42. pc, file, line, ok := runtime.Caller(2)
  43. if !ok {
  44. return
  45. }
  46. funcName := runtime.FuncForPC(pc).Name()
  47. funcName = path.Base(funcName)
  48. callerFields = append(callerFields, zap.String("func", funcName), zap.String("file", file), zap.Int("line", line))
  49. return
  50. }
  51. func Info(message string, fields ...zap.Field) {
  52. callerFields := getCallerInfoForLog()
  53. fields = append(fields, callerFields...)
  54. Logger.Info(message, fields...)
  55. }
  56. func Debug(message string, fields ...zap.Field) {
  57. callerFields := getCallerInfoForLog()
  58. fields = append(fields, callerFields...)
  59. Logger.Debug(message, fields...)
  60. }
  61. func Error(message string, fields ...zap.Field) {
  62. callerFields := getCallerInfoForLog()
  63. fields = append(fields, callerFields...)
  64. Logger.Error(message, fields...)
  65. }
  66. func Warn(message string, fields ...zap.Field) {
  67. callerFields := getCallerInfoForLog()
  68. fields = append(fields, callerFields...)
  69. Logger.Warn(message, fields...)
  70. }