logger.go 671 B

1234567891011121314151617181920212223242526272829
  1. package martini
  2. import (
  3. "log"
  4. "net/http"
  5. "time"
  6. )
  7. // Logger returns a middleware handler that logs the request as it goes in and the response as it goes out.
  8. func Logger() Handler {
  9. return func(res http.ResponseWriter, req *http.Request, c Context, log *log.Logger) {
  10. start := time.Now()
  11. addr := req.Header.Get("X-Real-IP")
  12. if addr == "" {
  13. addr = req.Header.Get("X-Forwarded-For")
  14. if addr == "" {
  15. addr = req.RemoteAddr
  16. }
  17. }
  18. log.Printf("Started %s %s for %s", req.Method, req.URL.Path, addr)
  19. rw := res.(ResponseWriter)
  20. c.Next()
  21. log.Printf("Completed %v %s in %v\n", rw.Status(), http.StatusText(rw.Status()), time.Since(start))
  22. }
  23. }