logger.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package config
  2. import (
  3. "io"
  4. "os"
  5. "path/filepath"
  6. "runtime"
  7. "strconv"
  8. "sync"
  9. "github.com/sirupsen/logrus"
  10. "gopkg.in/natefinch/lumberjack.v2"
  11. )
  12. // 设置日志记录控制
  13. func BuildLogger() {
  14. initLogger()
  15. initAccessLogger()
  16. }
  17. func initLogger() {
  18. level := os.Getenv("LOG_LEVEL")
  19. logLevel := 5
  20. switch level {
  21. case "panic":
  22. logLevel = 0
  23. case "fatal":
  24. logLevel = 1
  25. case "error":
  26. logLevel = 2
  27. case "warn":
  28. logLevel = 3
  29. case "info":
  30. logLevel = 4
  31. case "debug":
  32. logLevel = 5
  33. case "trace":
  34. logLevel = 6
  35. }
  36. logrus.SetLevel(logrus.Level(logLevel))
  37. formatter := &logrus.TextFormatter{
  38. ForceColors: true,
  39. FullTimestamp: true,
  40. DisableQuote: true,
  41. TimestampFormat: "2006-01-02 15:04:05",
  42. CallerPrettyfier: func(frame *runtime.Frame) (function string, file string) {
  43. return "", " " + filepath.Base(frame.File) + ":" + strconv.Itoa(frame.Line)
  44. },
  45. }
  46. logrus.SetFormatter(formatter)
  47. logger := &lumberjack.Logger{
  48. LocalTime: true,
  49. Filename: os.Getenv("LOG_PATH"),
  50. MaxSize: 50, // 一个文件最大为50M
  51. MaxBackups: 10, // 最多同时保存10份文件
  52. MaxAge: 15, // 一个文件最多同时存在15天
  53. Compress: true, // 压缩
  54. }
  55. writers := []io.Writer{
  56. logger,
  57. os.Stdout,
  58. }
  59. fileAndStdoutWriter := io.MultiWriter(writers...)
  60. logrus.SetOutput(fileAndStdoutWriter)
  61. }
  62. var (
  63. AccessLog *logrus.Logger
  64. accessLogOnce = sync.Once{}
  65. )
  66. func initAccessLogger() {
  67. accessLogOnce.Do(func() {
  68. AccessLog = logrus.New()
  69. AccessLog.SetFormatter(&logrus.TextFormatter{})
  70. logger := &lumberjack.Logger{
  71. LocalTime: true,
  72. Filename: os.Getenv("LOG_ACCESS_PATH"),
  73. MaxSize: 50, // 一个文件最大为50M
  74. MaxBackups: 10, // 最多同时保存10份文件
  75. MaxAge: 3, // 一个文件最多同时存在3天
  76. Compress: true, // 压缩
  77. }
  78. writers := []io.Writer{
  79. logger,
  80. os.Stdout,
  81. }
  82. fileAndStdoutWriter := io.MultiWriter(writers...)
  83. AccessLog.SetOutput(fileAndStdoutWriter)
  84. })
  85. }