logger.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package utils
  2. import (
  3. "os"
  4. "path/filepath"
  5. "strings"
  6. "time"
  7. "github.com/natefinch/lumberjack"
  8. "github.com/sirupsen/logrus"
  9. )
  10. var Logger *logrus.Logger
  11. func InitLogger(logDir string, levelConf string) {
  12. Logger = logrus.New()
  13. // 获取项目根目录路径
  14. projectRoot, err := os.Getwd()
  15. if err != nil {
  16. panic(err)
  17. }
  18. // 组合日志目录路径
  19. logPath := filepath.Join(projectRoot, logDir)
  20. // 确保日志目录存在
  21. if err := os.MkdirAll(logPath, 0755); err != nil {
  22. panic(err)
  23. }
  24. currentDate := time.Now().Format("20060102")
  25. logFile := filepath.Join(logPath, "policy-service-"+currentDate+".log")
  26. // 配置日志切割
  27. lumberjackLogger := &lumberjack.Logger{
  28. Filename: logFile,
  29. MaxSize: 100, // 每个日志文件最大100MB
  30. MaxBackups: 30, // 保留30个旧日志文件
  31. MaxAge: 30, // 保留30天
  32. Compress: true, // 压缩旧日志
  33. LocalTime: true, // 使用本地时间切割
  34. }
  35. Logger.SetOutput(lumberjackLogger)
  36. Logger.SetFormatter(&logrus.JSONFormatter{})
  37. // 从环境变量获取日志级别,默认为info
  38. if levelConf == "" {
  39. levelConf = "info"
  40. }
  41. // 分割多个级别
  42. levelStrs := strings.Split(levelConf, ",")
  43. var levels []logrus.Level
  44. for _, lvlStr := range levelStrs {
  45. level, err := logrus.ParseLevel(strings.TrimSpace(lvlStr))
  46. if err != nil {
  47. Logger.Warnf("无效的日志级别%s,跳过", lvlStr)
  48. continue
  49. }
  50. levels = append(levels, level)
  51. }
  52. if len(levels) == 0 {
  53. levels = []logrus.Level{logrus.InfoLevel} // 默认级别
  54. }
  55. }