Unify both debug logging middlewares.

We can remove one function from the stack by injecting the middleware
only when logging in enabled and the level is debug.

Signed-off-by: David Calavera <david.calavera@gmail.com>
This commit is contained in:
David Calavera 2015-12-01 14:33:33 -05:00
parent cf4fb15088
commit 82323294db
1 changed files with 7 additions and 20 deletions

View File

@ -21,23 +21,12 @@ import (
// Any function that has the appropriate signature can be register as a middleware.
type middleware func(handler httputils.APIFunc) httputils.APIFunc
// loggingMiddleware logs each request when logging is enabled.
func (s *Server) loggingMiddleware(handler httputils.APIFunc) httputils.APIFunc {
return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if s.cfg.Logging {
logrus.Debugf("%s %s", r.Method, r.RequestURI)
}
return handler(ctx, w, r, vars)
}
}
// debugRequestMiddleware dumps the request to logger
// This is implemented separately from `loggingMiddleware` so that we don't have to
// check the logging level or have httputil.DumpRequest called on each request.
// Instead the middleware is only injected when the logging level is set to debug
func (s *Server) debugRequestMiddleware(handler httputils.APIFunc) httputils.APIFunc {
func debugRequestMiddleware(handler httputils.APIFunc) httputils.APIFunc {
return func(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
if s.cfg.Logging && r.Method == "POST" {
logrus.Debugf("%s %s", r.Method, r.RequestURI)
if r.Method == "POST" {
if err := httputils.CheckForJSON(r); err == nil {
var buf bytes.Buffer
if _, err := buf.ReadFrom(r.Body); err == nil {
@ -53,6 +42,7 @@ func (s *Server) debugRequestMiddleware(handler httputils.APIFunc) httputils.API
}
}
}
return handler(ctx, w, r, vars)
}
}
@ -136,14 +126,11 @@ func (s *Server) handleWithGlobalMiddlewares(handler httputils.APIFunc) httputil
versionMiddleware,
s.corsMiddleware,
s.userAgentMiddleware,
s.loggingMiddleware,
}
// Only want this on debug level
// this is separate from the logging middleware so that we can do this check here once,
// rather than for each request.
if logrus.GetLevel() == logrus.DebugLevel {
middlewares = append(middlewares, s.debugRequestMiddleware)
if s.cfg.Logging && logrus.GetLevel() == logrus.DebugLevel {
middlewares = append(middlewares, debugRequestMiddleware)
}
h := handler