logs.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package logger
  2. import (
  3. "io"
  4. "log"
  5. "os"
  6. "github.com/sirupsen/logrus"
  7. )
  8. //var Logger *logrus.Logger
  9. type Hook struct {
  10. Writer io.Writer
  11. Formatter logrus.Formatter
  12. Level []logrus.Level
  13. }
  14. func (h *Hook) Fire(entry *logrus.Entry) error {
  15. line, err := h.Formatter.Format(entry)
  16. if err != nil {
  17. return err
  18. }
  19. h.Writer.Write(line)
  20. return nil
  21. }
  22. func (h *Hook) Levels() []logrus.Level {
  23. return h.Level
  24. }
  25. func newHook(writer io.Writer, formatter logrus.Formatter, level logrus.Level) *Hook {
  26. var levels []logrus.Level
  27. for _, l := range logrus.AllLevels {
  28. if l <= level {
  29. levels = append(levels, l)
  30. }
  31. }
  32. return &Hook{
  33. Writer: writer,
  34. Formatter: formatter,
  35. Level: levels,
  36. }
  37. }
  38. func Init(logFilePath string, logLevelStr string) *logrus.Logger {
  39. var Logger *logrus.Logger
  40. logLevel, err := logrus.ParseLevel(logLevelStr)
  41. if err != nil {
  42. logLevel = logrus.InfoLevel
  43. log.Printf("Invalid log level: %s. Defaulting to info", logLevelStr)
  44. }
  45. Logger = logrus.New()
  46. Logger.SetOutput(io.Discard)
  47. logFile, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
  48. if err != nil {
  49. log.Printf("Failed to open log file: %s", logFilePath)
  50. panic(err)
  51. }
  52. Logger.AddHook(newHook(
  53. logFile,
  54. &logrus.JSONFormatter{},
  55. logLevel,
  56. ))
  57. Logger.AddHook(newHook(
  58. os.Stderr,
  59. &logrus.TextFormatter{
  60. FullTimestamp: true,
  61. ForceColors: true,
  62. },
  63. logLevel,
  64. ))
  65. return Logger
  66. }