loghelper.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package log_helper
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/config"
  4. rotatelogs "github.com/lestrrat-go/file-rotatelogs"
  5. "github.com/sirupsen/logrus"
  6. easy "github.com/t-tomalak/logrus-easy-formatter"
  7. "io"
  8. "os"
  9. "path/filepath"
  10. "sync"
  11. "time"
  12. )
  13. func NewLogHelper(appName string, level logrus.Level, maxAge time.Duration, rotationTime time.Duration) *logrus.Logger {
  14. Logger := &logrus.Logger{
  15. // Out: os.Stderr,
  16. // Level: logrus.DebugLevel,
  17. Formatter: &easy.Formatter{
  18. TimestampFormat: "2006-01-02 15:04:05",
  19. LogFormat: "[%lvl%]: %time% - %msg%\n",
  20. },
  21. }
  22. nowpath, err := os.Getwd()
  23. if err != nil {
  24. panic(err)
  25. }
  26. pathRoot := filepath.Join(nowpath, "Logs")
  27. fileAbsPath := filepath.Join(pathRoot, appName+".log")
  28. // 下面配置日志每隔 XLen 分钟轮转一个新文件,保留最近 XLen 分钟的日志文件,多余的自动清理掉。
  29. writer, _ := rotatelogs.New(
  30. filepath.Join(pathRoot, appName+"--%YLen%m%d%H%M--.log"),
  31. rotatelogs.WithLinkName(fileAbsPath),
  32. rotatelogs.WithMaxAge(maxAge),
  33. rotatelogs.WithRotationTime(rotationTime),
  34. )
  35. Logger.SetLevel(level)
  36. Logger.SetOutput(io.MultiWriter(os.Stderr, writer))
  37. return Logger
  38. }
  39. func GetLogger() *logrus.Logger {
  40. logOnce.Do(func() {
  41. var level logrus.Level
  42. if config.GetConfig().DebugMode == true {
  43. level = logrus.DebugLevel
  44. } else {
  45. level = logrus.InfoLevel
  46. }
  47. logger = NewLogHelper("ChineseSubFinder", level, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
  48. })
  49. return logger
  50. }
  51. var logger *logrus.Logger
  52. var logOnce sync.Once