diff --git a/internal/handlers/imageenc.go b/internal/handlers/imageenc.go index c93b79f..1ba4b73 100644 --- a/internal/handlers/imageenc.go +++ b/internal/handlers/imageenc.go @@ -91,7 +91,8 @@ func (s *Handlers) HandleImageEnc() http.HandlerFunc { // Log completion duration := time.Since(start) - s.log.Info("served encrypted image", + s.log.Info("image served", + "cache_key", imgcache.CacheKey(req), "host", req.SourceHost, "path", req.SourcePath, "format", req.Format, diff --git a/internal/middleware/middleware.go b/internal/middleware/middleware.go index a0b5515..2625608 100644 --- a/internal/middleware/middleware.go +++ b/internal/middleware/middleware.go @@ -58,11 +58,12 @@ func ipFromHostPort(hp string) string { type loggingResponseWriter struct { http.ResponseWriter - statusCode int + statusCode int + bytesWritten int64 } func newLoggingResponseWriter(w http.ResponseWriter) *loggingResponseWriter { - return &loggingResponseWriter{w, http.StatusOK} + return &loggingResponseWriter{ResponseWriter: w, statusCode: http.StatusOK} } func (lrw *loggingResponseWriter) WriteHeader(code int) { @@ -70,6 +71,13 @@ func (lrw *loggingResponseWriter) WriteHeader(code int) { lrw.ResponseWriter.WriteHeader(code) } +func (lrw *loggingResponseWriter) Write(b []byte) (int, error) { + n, err := lrw.ResponseWriter.Write(b) + lrw.bytesWritten += int64(n) + + return n, err +} + // Logging returns a logging middleware. func (s *Middleware) Logging() func(http.Handler) http.Handler { return func(next http.Handler) http.Handler { @@ -90,6 +98,7 @@ func (s *Middleware) Logging() func(http.Handler) http.Handler { "proto", r.Proto, "remoteIP", ipFromHostPort(r.RemoteAddr), "status", lrw.statusCode, + "response_bytes", lrw.bytesWritten, "latency_ms", latency.Milliseconds(), ) }()