aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAlexander Stecher <[email protected]>2024-09-26 20:23:12 +0200
committerGitHub <[email protected]>2024-09-26 12:23:12 -0600
commit22c98ea165bdfbca33fbc77ce3b2bd22d3ee4626 (patch)
treeaac18134676f41b2be95999d816dda8f5922da6c
parent2faeac0a104c72e9396717406ecb7c353bf9aa64 (diff)
downloadcaddy-22c98ea165bdfbca33fbc77ce3b2bd22d3ee4626.tar.gz
caddy-22c98ea165bdfbca33fbc77ce3b2bd22d3ee4626.zip
caddyhttp: Optimize logs using zap's WithLazy() (#6590)
* uses zap's .WithLazy with a cloned request * fixes the cloning * adds comment explaining why cloning is faster
-rw-r--r--modules/caddyhttp/server.go8
1 files changed, 5 insertions, 3 deletions
diff --git a/modules/caddyhttp/server.go b/modules/caddyhttp/server.go
index ece3f1cd2..f5478cb37 100644
--- a/modules/caddyhttp/server.go
+++ b/modules/caddyhttp/server.go
@@ -313,16 +313,18 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
- // encode the request for logging purposes before
+ // clone the request for logging purposes before
// it enters any handler chain; this is necessary
// to capture the original request in case it gets
// modified during handling
+ // cloning the request and using .WithLazy is considerably faster
+ // than using .With, which will JSON encode the request immediately
shouldLogCredentials := s.Logs != nil && s.Logs.ShouldLogCredentials
loggableReq := zap.Object("request", LoggableHTTPRequest{
- Request: r,
+ Request: r.Clone(r.Context()),
ShouldLogCredentials: shouldLogCredentials,
})
- errLog := s.errorLogger.With(loggableReq)
+ errLog := s.errorLogger.WithLazy(loggableReq)
var duration time.Duration