logs.go 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package logs
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "os"
  7. "path"
  8. "time"
  9. "github.com/sirupsen/logrus"
  10. )
  11. var Log *logrus.Logger
  12. const (
  13. red = 31
  14. yellow = 33
  15. blue = 36
  16. gray = 37
  17. )
  18. type LogFormatter struct {
  19. }
  20. func (t LogFormatter) Format(entry *logrus.Entry) ([]byte, error) {
  21. //根据不同的level展示颜色
  22. var levelColor int
  23. switch entry.Level {
  24. case logrus.DebugLevel, logrus.TraceLevel:
  25. levelColor = gray
  26. case logrus.WarnLevel:
  27. levelColor = yellow
  28. case logrus.ErrorLevel, logrus.FatalLevel, logrus.PanicLevel:
  29. levelColor = red
  30. default:
  31. levelColor = blue
  32. }
  33. //字节缓冲区
  34. var b *bytes.Buffer
  35. if entry.Buffer != nil {
  36. b = entry.Buffer
  37. } else {
  38. b = &bytes.Buffer{}
  39. }
  40. //自定义日期格式
  41. timestamp := entry.Time.Format("2006-01-02 15:04:06")
  42. if entry.HasCaller() {
  43. //自定义文件路径
  44. //fmt.Println("自定义文件路径")
  45. funcVal := entry.Caller.Function
  46. fileVal := fmt.Sprintf("%s:%d", path.Base(entry.Caller.File), entry.Caller.Line)
  47. //自定义输出格式
  48. fmt.Fprintf(b, "[%s] \033[%dm[%s]\033[0m %s %s %s \n", timestamp, levelColor, entry.Level, fileVal, funcVal, entry.Message)
  49. } else {
  50. fmt.Println(" else else自定义文件路径")
  51. fmt.Fprintf(b, "[%s] \033[%dm[%s]\033[0m %s %s %s \n", timestamp, levelColor, entry.Level, entry.Message)
  52. }
  53. return b.Bytes(), nil
  54. }
  55. func InitLogger() *logrus.Logger {
  56. // 定义logs文件夹的路径
  57. logsDir := "./logs"
  58. // 尝试获取logs文件夹的信息
  59. _, err := os.Stat(logsDir)
  60. if os.IsNotExist(err) {
  61. // 如果文件夹不存在,则创建它
  62. err = os.MkdirAll(logsDir, 0755)
  63. if err != nil {
  64. // 处理创建文件夹时可能遇到的错误
  65. fmt.Println("创建文件夹时出错:", err)
  66. }
  67. }
  68. mLog := logrus.New() //新建一个实例
  69. currentTime := time.Now().Format("2006-01-02 15.04.06")
  70. logName := "./logs/xuguALL_" + currentTime + "txt"
  71. file, _ := os.OpenFile(logName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0755)
  72. mLog.SetOutput(io.MultiWriter(os.Stdout, file)) //设置输出类型
  73. mLog.SetReportCaller(true) //开启返回函数名和行号
  74. //mLog.SetFormatter(&logrus.JSONFormatter{})//设置自定义的Formatter
  75. mLog.SetFormatter(&LogFormatter{}) //设置自定义的Formatter
  76. mLog.SetLevel(logrus.DebugLevel) //设置最低等级
  77. return mLog
  78. }