logrus.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package initializer
  2. import (
  3. "gin-pathway/internal/app/config"
  4. "github.com/lestrrat-go/file-rotatelogs"
  5. log "github.com/sirupsen/logrus"
  6. "io"
  7. "os"
  8. "time"
  9. )
  10. // InitializeLogger 设置日志输出并初始化日志文件
  11. func InitializeLogger() error {
  12. // 设置日志格式
  13. switch config.Conf.Log.Format {
  14. case "json":
  15. log.SetFormatter(&log.JSONFormatter{})
  16. case "text":
  17. log.SetFormatter(&log.TextFormatter{})
  18. default:
  19. log.SetFormatter(&log.JSONFormatter{})
  20. }
  21. // 设置日志级别
  22. switch config.Conf.Log.Level {
  23. case "debug":
  24. log.SetLevel(log.DebugLevel)
  25. case "info":
  26. log.SetLevel(log.InfoLevel)
  27. case "warn":
  28. log.SetLevel(log.WarnLevel)
  29. case "error":
  30. log.SetLevel(log.ErrorLevel)
  31. case "fatal":
  32. log.SetLevel(log.FatalLevel)
  33. case "panic":
  34. log.SetLevel(log.PanicLevel)
  35. default:
  36. log.SetLevel(log.InfoLevel)
  37. }
  38. // 设置打印调用信息
  39. log.SetReportCaller(config.Conf.Log.ReportCaller)
  40. logDir := "../logs"
  41. err := os.MkdirAll(logDir, 0755)
  42. if err != nil {
  43. log.Error("创建日志目录失败: %v", err)
  44. return err
  45. }
  46. // 设置日志输出,按天切割
  47. logFilePath := logDir + "/app.%Y%m%d.log"
  48. writer, err := rotatelogs.New(
  49. logFilePath,
  50. rotatelogs.WithLinkName(logDir+"/app.log"),
  51. rotatelogs.WithMaxAge(7*24*time.Hour), // 保留7天
  52. rotatelogs.WithRotationTime(24*time.Hour), // 每天切割一次
  53. )
  54. if err != nil {
  55. log.Error("设置日志输出失败: %v", err)
  56. return err
  57. }
  58. multiWriter := io.MultiWriter(os.Stdout, writer)
  59. log.SetOutput(multiWriter)
  60. return nil
  61. }