loghelper.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package log_helper
  2. import (
  3. "github.com/allanpk716/ChineseSubFinder/internal/pkg/global_value"
  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. "time"
  11. )
  12. func NewLogHelper(appName string, logStorePath string, level logrus.Level, maxAge time.Duration, rotationTime time.Duration) *logrus.Logger {
  13. Logger := logrus.New()
  14. Logger.Formatter = &easy.Formatter{
  15. TimestampFormat: "2006-01-02 15:04:05",
  16. LogFormat: "[%lvl%]: %time% - %msg%\n",
  17. }
  18. pathRoot := filepath.Join(logStorePath, "Logs")
  19. fileAbsPath := filepath.Join(pathRoot, appName+".log")
  20. // 下面配置日志每隔 X 分钟轮转一个新文件,保留最近 X 分钟的日志文件,多余的自动清理掉。
  21. writer, _ := rotatelogs.New(
  22. filepath.Join(pathRoot, appName+"--%Y%m%d%H%M--.log"),
  23. rotatelogs.WithLinkName(fileAbsPath),
  24. rotatelogs.WithMaxAge(maxAge),
  25. rotatelogs.WithRotationTime(rotationTime),
  26. )
  27. Logger.SetLevel(level)
  28. Logger.SetOutput(io.MultiWriter(os.Stderr, writer))
  29. // 可以输出函数调用还文件位置
  30. //if level == logrus.DebugLevel {
  31. // Logger.SetReportCaller(true)
  32. //}
  33. return Logger
  34. }
  35. func isFile(filePath string) bool {
  36. s, err := os.Stat(filePath)
  37. if err != nil {
  38. return false
  39. }
  40. return !s.IsDir()
  41. }
  42. // WriteDebugFile 写入开启 Debug 级别日志记录的特殊文件,注意这个最好是在主程序中调用,这样就跟主程序在一个目录下生成,log 去检测是否存在才有意义
  43. func WriteDebugFile() error {
  44. if isFile(filepath.Join(global_value.ConfigRootDirFPath(), DebugFileName)) == true {
  45. return nil
  46. }
  47. f, err := os.Create(filepath.Join(global_value.ConfigRootDirFPath(), DebugFileName))
  48. defer func() {
  49. _ = f.Close()
  50. }()
  51. if err != nil {
  52. return err
  53. }
  54. return nil
  55. }
  56. // DeleteDebugFile 删除开启 Debug 级别日志记录的特殊文件
  57. func DeleteDebugFile() error {
  58. if isFile(filepath.Join(global_value.ConfigRootDirFPath(), DebugFileName)) == false {
  59. return nil
  60. }
  61. err := os.Remove(filepath.Join(global_value.ConfigRootDirFPath(), DebugFileName))
  62. if err != nil {
  63. return err
  64. }
  65. return nil
  66. }
  67. func GetLogger4Tester() *logrus.Logger {
  68. if logger4Tester == nil {
  69. logger4Tester = NewLogHelper(LogNameChineseSubFinder, os.TempDir(), logrus.DebugLevel, time.Duration(7*24)*time.Hour, time.Duration(24)*time.Hour)
  70. }
  71. return logger4Tester
  72. }
  73. const DebugFileName = "opendebuglog"
  74. const (
  75. LogNameChineseSubFinder = "ChineseSubFinder"
  76. LogNameGetCAPTCHA = "GetCAPTCHA"
  77. LogNameBackEnd = "BackEnd"
  78. )
  79. var (
  80. logger4Tester *logrus.Logger
  81. )