tsweb: add a StdHandler that doesn't log 200 responses.
@@ -170,11 +170,19 @@ func (h HandlerFunc) ServeHTTPErr(w http.ResponseWriter, r *http.Request) error
// Handled requests are logged using logf, as are any errors. Errors
// are handled as specified by the Handler interface.
func StdHandler(h Handler, logf logger.Logf) http.Handler {
- return stdHandler(h, logf, time.Now)
+ return stdHandler(h, logf, time.Now, true)
}
-func stdHandler(h Handler, logf logger.Logf, now func() time.Time) http.Handler {
- return handler{h, logf, now}
+// StdHandlerNo200s is like StdHandler, but successfully handled HTTP
+// requests don't write an access log entry to logf.
+//
+// TODO(danderson): quick stopgap, probably want ...Options on StdHandler instead?
+func StdHandlerNo200s(h Handler, logf logger.Logf) http.Handler {
+ return stdHandler(h, logf, time.Now, false)
+}
+
+func stdHandler(h Handler, logf logger.Logf, now func() time.Time, log200s bool) http.Handler {
+ return handler{h, logf, now, log200s}
}
// handler is an http.Handler that wraps a Handler and handles errors.
@@ -182,6 +190,7 @@ type handler struct {
h Handler
logf logger.Logf
timeNow func() time.Time
+ log200s bool
}
// ServeHTTP implements the http.Handler interface.
@@ -248,8 +257,10 @@ func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
}
}
+ if msg.Code != 200 || h.log200s {
h.logf("%s", msg)
}
+}
// loggingResponseWriter wraps a ResponseWriter and record the HTTP
// response code that gets sent, if any.
