logger.go 1.4 KB

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