logger.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package utils
  2. import (
  3. "io"
  4. "os"
  5. "path/filepath"
  6. "strings"
  7. "time"
  8. "github.com/natefinch/lumberjack"
  9. "github.com/sirupsen/logrus"
  10. )
  11. var Logger *logrus.Logger
  12. func InitLogger(logDir string, levelConf string) {
  13. Logger = logrus.New()
  14. // --- 目录准备(和之前一样) ---
  15. cwd, err := os.Getwd()
  16. if err != nil {
  17. panic(err)
  18. }
  19. fullLogDir := filepath.Join(cwd, logDir)
  20. if err := os.MkdirAll(fullLogDir, 0755); err != nil {
  21. panic(err)
  22. }
  23. // --- 滚动文件 + stdout ---
  24. currentDate := time.Now().Format("20060102")
  25. fileWriter := &lumberjack.Logger{
  26. Filename: filepath.Join(fullLogDir, "policy-service-"+currentDate+".log"),
  27. MaxSize: 100,
  28. MaxBackups: 30,
  29. MaxAge: 30,
  30. Compress: true,
  31. LocalTime: true,
  32. }
  33. mw := io.MultiWriter(fileWriter, os.Stdout)
  34. Logger.SetOutput(mw)
  35. Logger.SetFormatter(&logrus.JSONFormatter{
  36. TimestampFormat: time.RFC3339,
  37. })
  38. // --- 解析环境变量里的多个级别 ---
  39. if levelConf == "" {
  40. levelConf = "info"
  41. }
  42. levelStrs := strings.Split(levelConf, ",")
  43. var desired []logrus.Level
  44. for _, s := range levelStrs {
  45. if lvl, err := logrus.ParseLevel(strings.TrimSpace(s)); err == nil {
  46. desired = append(desired, lvl)
  47. } else {
  48. Logger.Warnf("忽略无效日志级别:%q", s)
  49. }
  50. }
  51. if len(desired) == 0 {
  52. desired = []logrus.Level{logrus.InfoLevel}
  53. }
  54. // --- 在 desired 里找到“数值最大的那个”(也就是最低阈值) ---
  55. threshold := desired[0]
  56. for _, lvl := range desired[1:] {
  57. if lvl > threshold {
  58. threshold = lvl
  59. }
  60. }
  61. Logger.SetLevel(threshold)
  62. Logger.Infof("日志阈值已设置为 %s", threshold.String())
  63. }