loghelper.go 1.3 KB

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