logger.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package logger
  2. import (
  3. "os"
  4. "path/filepath"
  5. "time"
  6. rotatelogs "github.com/lestrrat/go-file-rotatelogs"
  7. "github.com/rifflock/lfshook"
  8. "github.com/sirupsen/logrus"
  9. )
  10. var logger *logrus.Logger
  11. var logWriter *rotatelogs.RotateLogs
  12. func Init(logpath string, loglevel int) error {
  13. // 创建日志目录
  14. err := os.MkdirAll(logpath, os.ModePerm)
  15. if err != nil {
  16. return err
  17. }
  18. logger = logrus.New()
  19. logname := filepath.Join(logpath, "mtp2_if")
  20. // 显示行号等信息
  21. logger.SetReportCaller(true)
  22. // 设置日志输出
  23. src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
  24. if err != nil {
  25. return err
  26. }
  27. logger.SetOutput(src)
  28. // 设置日志级别
  29. logger.SetLevel(logrus.Level(loglevel))
  30. // 设置分割规则
  31. logWriter, err = rotatelogs.New(
  32. logname+"_%Y-%m-%d_%H.log", // 分割文件名
  33. rotatelogs.WithMaxAge(365*7*24*time.Hour), // 文件最长保存时间
  34. rotatelogs.WithRotationTime(time.Hour), // 日志分割时间
  35. )
  36. // 映射日志级别与日志写对象
  37. writerMap := lfshook.WriterMap{
  38. logrus.PanicLevel: logWriter,
  39. logrus.FatalLevel: logWriter,
  40. logrus.ErrorLevel: logWriter,
  41. logrus.WarnLevel: logWriter,
  42. logrus.InfoLevel: logWriter,
  43. logrus.DebugLevel: logWriter,
  44. logrus.TraceLevel: logWriter,
  45. }
  46. // 创建日志文件钩子
  47. lfHook := lfshook.NewHook(writerMap, &logrus.TextFormatter{
  48. TimestampFormat: "2006-01-02 15:04:05",
  49. })
  50. // 添加日志钩子
  51. logger.AddHook(lfHook)
  52. return nil
  53. }
  54. func GetLogWriter() *rotatelogs.RotateLogs {
  55. return logWriter
  56. }
  57. func GetLogger() *logrus.Logger {
  58. return logger
  59. }