diff --git a/cmd/syncthing/debug.go b/cmd/syncthing/debug.go index d7c4d80d4..de38445ae 100644 --- a/cmd/syncthing/debug.go +++ b/cmd/syncthing/debug.go @@ -18,6 +18,10 @@ var ( httpl = logger.DefaultLogger.NewFacility("http", "REST API") ) +func shouldDebugHTTP() bool { + return l.ShouldDebug("http") +} + func init() { l.SetDebug("main", strings.Contains(os.Getenv("STTRACE"), "main") || os.Getenv("STTRACE") == "all") l.SetDebug("http", strings.Contains(os.Getenv("STTRACE"), "http") || os.Getenv("STTRACE") == "all") diff --git a/cmd/syncthing/gui.go b/cmd/syncthing/gui.go index 953c3e05f..68c335ba3 100644 --- a/cmd/syncthing/gui.go +++ b/cmd/syncthing/gui.go @@ -298,23 +298,25 @@ func debugMiddleware(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { t0 := time.Now() h.ServeHTTP(w, r) - ms := 1000 * time.Since(t0).Seconds() - // The variable `w` is most likely a *http.response, which we can't do - // much with since it's a non exported type. We can however peek into - // it with reflection to get at the status code and number of bytes - // written. - var status, written int64 - if rw := reflect.Indirect(reflect.ValueOf(w)); rw.IsValid() && rw.Kind() == reflect.Struct { - if rf := rw.FieldByName("status"); rf.IsValid() && rf.Kind() == reflect.Int { - status = rf.Int() - } - if rf := rw.FieldByName("written"); rf.IsValid() && rf.Kind() == reflect.Int64 { - written = rf.Int() + if shouldDebugHTTP() { + ms := 1000 * time.Since(t0).Seconds() + + // The variable `w` is most likely a *http.response, which we can't do + // much with since it's a non exported type. We can however peek into + // it with reflection to get at the status code and number of bytes + // written. + var status, written int64 + if rw := reflect.Indirect(reflect.ValueOf(w)); rw.IsValid() && rw.Kind() == reflect.Struct { + if rf := rw.FieldByName("status"); rf.IsValid() && rf.Kind() == reflect.Int { + status = rf.Int() + } + if rf := rw.FieldByName("written"); rf.IsValid() && rf.Kind() == reflect.Int64 { + written = rf.Int() + } } + l.Debugf("http: %s %q: status %d, %d bytes in %.02f ms", r.Method, r.URL.String(), status, written, ms) } - - l.Debugf("http: %s %q: status %d, %d bytes in %.02f ms", r.Method, r.URL.String(), status, written, ms) }) }