RotateHook.go 1011 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package log
  2. import (
  3. "github.com/lestrrat-go/file-rotatelogs"
  4. "github.com/rifflock/lfshook"
  5. "github.com/sirupsen/logrus"
  6. "time"
  7. )
  8. var logLevels = map[logrus.Level]string{
  9. logrus.DebugLevel: "debug",
  10. logrus.InfoLevel: "info",
  11. logrus.WarnLevel: "warn",
  12. logrus.ErrorLevel: "error",
  13. }
  14. func NewRotateHook(l logrus.Level, path string, day uint, pass bool) logrus.Hook {
  15. var writerMap = lfshook.WriterMap{}
  16. if path == "" {
  17. path = "."
  18. }
  19. name := path + "/" + logLevels[l]
  20. writer, err := rotatelogs.New(
  21. name+"_%Y%m%d.log",
  22. rotatelogs.WithLinkName(name+".log"),
  23. rotatelogs.WithRotationTime(time.Hour*24),
  24. rotatelogs.WithRotationCount(day),
  25. )
  26. if err != nil {
  27. logrus.Errorf("config local file system for logger error: %v", err)
  28. }
  29. for level := logrus.ErrorLevel; level <= logrus.DebugLevel; level++ {
  30. if level != l && (level > l || !pass) {
  31. continue
  32. }
  33. writerMap[level] = writer
  34. }
  35. rotateHook := lfshook.NewHook(writerMap, &LineFormatter{
  36. Skip: 13,
  37. })
  38. return rotateHook
  39. }