Commit 36b3c5f3 authored by Janoš Guljaš's avatar Janoš Guljaš Committed by GitHub

suppress log messages for debug api metrics, health and readiness (#239)

parent a1443489
...@@ -21,9 +21,12 @@ import ( ...@@ -21,9 +21,12 @@ import (
func (s *server) setupRouting() { func (s *server) setupRouting() {
baseRouter := http.NewServeMux() baseRouter := http.NewServeMux()
baseRouter.Handle("/metrics", promhttp.InstrumentMetricHandler( baseRouter.Handle("/metrics", web.ChainHandlers(
s.metricsRegistry, logging.SetAccessLogLevelHandler(0), // suppress access log messages
promhttp.HandlerFor(s.metricsRegistry, promhttp.HandlerOpts{}), web.FinalHandler(promhttp.InstrumentMetricHandler(
s.metricsRegistry,
promhttp.HandlerFor(s.metricsRegistry, promhttp.HandlerOpts{}),
)),
)) ))
router := mux.NewRouter() router := mux.NewRouter()
...@@ -38,8 +41,14 @@ func (s *server) setupRouting() { ...@@ -38,8 +41,14 @@ func (s *server) setupRouting() {
router.Handle("/debug/vars", expvar.Handler()) router.Handle("/debug/vars", expvar.Handler())
router.HandleFunc("/health", s.statusHandler) router.Handle("/health", web.ChainHandlers(
router.HandleFunc("/readiness", s.statusHandler) logging.SetAccessLogLevelHandler(0), // suppress access log messages
web.FinalHandlerFunc(s.statusHandler),
))
router.Handle("/readiness", web.ChainHandlers(
logging.SetAccessLogLevelHandler(0), // suppress access log messages
web.FinalHandlerFunc(s.statusHandler),
))
router.Handle("/addresses", jsonhttp.MethodHandler{ router.Handle("/addresses", jsonhttp.MethodHandler{
"GET": http.HandlerFunc(s.addressesHandler), "GET": http.HandlerFunc(s.addressesHandler),
......
...@@ -12,14 +12,20 @@ import ( ...@@ -12,14 +12,20 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
// NewHTTPAccessLogHandler creates a handler that will log a message after a
// request has been served.
func NewHTTPAccessLogHandler(logger Logger, level logrus.Level, message string) func(h http.Handler) http.Handler { func NewHTTPAccessLogHandler(logger Logger, level logrus.Level, message string) func(h http.Handler) http.Handler {
return func(h http.Handler) http.Handler { return func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
startTime := time.Now() startTime := time.Now()
rl := &responseLogger{w, 0, 0} rl := &responseLogger{w, 0, 0, level}
h.ServeHTTP(rl, r) h.ServeHTTP(rl, r)
if rl.level == 0 {
return
}
status := rl.status status := rl.status
if status == 0 { if status == 0 {
status = http.StatusOK status = http.StatusOK
...@@ -49,7 +55,21 @@ func NewHTTPAccessLogHandler(logger Logger, level logrus.Level, message string) ...@@ -49,7 +55,21 @@ func NewHTTPAccessLogHandler(logger Logger, level logrus.Level, message string)
if v := r.Header.Get("X-Real-Ip"); v != "" { if v := r.Header.Get("X-Real-Ip"); v != "" {
fields["x-real-ip"] = v fields["x-real-ip"] = v
} }
logger.WithFields(fields).Log(level, message) logger.WithFields(fields).Log(rl.level, message)
})
}
}
// SetAccessLogLevelHandler overrides the log level set in
// NewHTTPAccessLogHandler for a specific endpoint. Use log level 0 to suppress
// log messages.
func SetAccessLogLevelHandler(level logrus.Level) func(h http.Handler) http.Handler {
return func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if rl, ok := w.(*responseLogger); ok {
rl.level = level
}
h.ServeHTTP(w, r)
}) })
} }
} }
...@@ -58,6 +78,7 @@ type responseLogger struct { ...@@ -58,6 +78,7 @@ type responseLogger struct {
w http.ResponseWriter w http.ResponseWriter
status int status int
size int size int
level logrus.Level
} }
func (l *responseLogger) Header() http.Header { func (l *responseLogger) Header() http.Header {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment