From 54f7e5d54b0e8f547dd2bae804b36694cd0f1601 Mon Sep 17 00:00:00 2001 From: Richard Scothern Date: Wed, 29 Jul 2015 16:52:47 -0700 Subject: [PATCH] When a request completes ensure only one log line is printed which includes the http response. When debugging non-successful registry requests this will place the error details and http status fields in the same log line giving easier visibility to what error occured in the request. Signed-off-by: Richard Scothern --- registry/handlers/app.go | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/registry/handlers/app.go b/registry/handlers/app.go index fd8f36bb..12f456fc 100644 --- a/registry/handlers/app.go +++ b/registry/handlers/app.go @@ -343,8 +343,12 @@ func (app *App) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Instantiate an http context here so we can track the error codes // returned by the request router. ctx := defaultContextManager.context(app, w, r) + defer func() { - ctxu.GetResponseLogger(ctx).Infof("response completed") + status, ok := ctx.Value("http.response.status").(int) + if ok && status >= 200 && status <= 399 { + ctxu.GetResponseLogger(ctx).Infof("response completed") + } }() defer defaultContextManager.release(ctx) @@ -424,11 +428,11 @@ func (app *App) dispatcher(dispatch dispatchFunc) http.Handler { // own errors if they need different behavior (such as range errors // for layer upload). if context.Errors.Len() > 0 { - app.logError(context, context.Errors) - if err := errcode.ServeJSON(w, context.Errors); err != nil { ctxu.GetLogger(context).Errorf("error serving error json: %v (from %v)", err, context.Errors) } + + app.logError(context, context.Errors) } }) } @@ -457,7 +461,7 @@ func (app *App) logError(context context.Context, errors errcode.Errors) { "err.code", "err.message", "err.detail")) - ctxu.GetLogger(c).Errorf("An error occured") + ctxu.GetResponseLogger(c).Errorf("response completed with error") } }