logger.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /*
  2. @Time : 2019-06-28 17:48
  3. @Author : zr
  4. @File : logger
  5. @Software: GoLand
  6. */
  7. package middleware
  8. import (
  9. "encoding/json"
  10. "github.com/ZR233/goutils/stackx"
  11. "github.com/gin-gonic/gin"
  12. "github.com/sirupsen/logrus"
  13. "time"
  14. "video_course/errors"
  15. "video_course/model"
  16. )
  17. func Logger() gin.HandlerFunc {
  18. return func(c *gin.Context) {
  19. beginTime := time.Now()
  20. defer func() {
  21. code := 0
  22. logMsg := "success"
  23. if p := recover(); p != nil {
  24. err := p.(error)
  25. stdErr := errors.FromError(err)
  26. logMsg = stdErr.Error() + "\n" + string(stackx.Stack(0))
  27. code = int(stdErr.Code)
  28. _ = c.Error(err)
  29. }
  30. userid := ""
  31. src := ""
  32. endTime := time.Now()
  33. if i, exists := c.Get("session"); exists {
  34. s, ok := i.(*model.Session)
  35. if ok {
  36. if s != nil {
  37. userid = s.UserId
  38. src = s.Channel
  39. }
  40. }
  41. }
  42. postForm := c.Request.PostForm
  43. params, _ := json.Marshal(postForm)
  44. url := c.Request.URL.Path
  45. event := logrus.WithFields(logrus.Fields{
  46. "execTime": endTime.Sub(beginTime).Milliseconds(),
  47. "trace": url,
  48. "optUserId": userid,
  49. "src": src,
  50. "code": code,
  51. "params": string(params),
  52. })
  53. event.Time = beginTime
  54. if len(c.Errors) > 0 {
  55. event.Warn(logMsg)
  56. } else {
  57. event.Info(logMsg)
  58. }
  59. }()
  60. c.Next()
  61. }
  62. }