logging.go 981 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package router
  2. import (
  3. "net/http"
  4. "github.com/imgproxy/imgproxy/v3/ierrors"
  5. log "github.com/sirupsen/logrus"
  6. )
  7. func LogRequest(reqID string, r *http.Request) {
  8. path := r.RequestURI
  9. log.WithFields(log.Fields{
  10. "request_id": reqID,
  11. "method": r.Method,
  12. }).Infof("Started %s", path)
  13. }
  14. func LogResponse(reqID string, r *http.Request, status int, err *ierrors.Error, additional ...log.Fields) {
  15. var level log.Level
  16. switch {
  17. case status >= 500:
  18. level = log.ErrorLevel
  19. case status >= 400:
  20. level = log.WarnLevel
  21. default:
  22. level = log.InfoLevel
  23. }
  24. fields := log.Fields{
  25. "request_id": reqID,
  26. "method": r.Method,
  27. "status": status,
  28. }
  29. if err != nil {
  30. fields["error"] = err
  31. if stack := err.FormatStack(); len(stack) > 0 {
  32. fields["stack"] = stack
  33. }
  34. }
  35. for _, f := range additional {
  36. for k, v := range f {
  37. fields[k] = v
  38. }
  39. }
  40. log.WithFields(fields).Logf(
  41. level,
  42. "Completed in %s %s", ctxTime(r.Context()), r.RequestURI,
  43. )
  44. }