initLog.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package logger
  2. import (
  3. rotatelogs "github.com/lestrrat-go/file-rotatelogs"
  4. "os"
  5. "path/filepath"
  6. "time"
  7. log "github.com/sirupsen/logrus"
  8. )
  9. var globalLogger *log.Logger
  10. // Initialize 初始化全局 Logger 实例。
  11. func Initialize(logPath string) error {
  12. // 创建日志目录
  13. if err := os.MkdirAll(filepath.Dir(logPath), os.ModePerm); err != nil {
  14. return err
  15. }
  16. // 使用 rotatelogs 进行日志轮转
  17. writer, err := rotatelogs.New(
  18. logPath+".%Y%m%d.log", // 文件名模式
  19. rotatelogs.WithMaxAge(3*24*time.Hour), // 最大保留时间3天
  20. rotatelogs.WithRotationTime(24*time.Hour), // 每天轮转一次
  21. rotatelogs.WithLinkName(logPath), // 符号链接指向最新日志文件
  22. rotatelogs.WithClock(rotatelogs.Local), // 使用本地时区
  23. )
  24. if err != nil {
  25. return err
  26. }
  27. // 设置日志格式为JSON
  28. formatter := &log.JSONFormatter{
  29. TimestampFormat: time.RFC3339,
  30. }
  31. // 创建一个新的 Logger 实例
  32. logger := log.New()
  33. logger.SetFormatter(formatter)
  34. logger.SetLevel(log.InfoLevel)
  35. logger.SetOutput(writer) // 设置输出到 rotatelogs 的 writer
  36. // 将全局变量设置为新创建的 Logger 实例
  37. globalLogger = logger
  38. return nil
  39. }
  40. // Get 获取全局 Logger 实例。
  41. func Get() *log.Logger {
  42. if globalLogger == nil {
  43. panic("Logger not initialized")
  44. }
  45. return globalLogger
  46. }