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 (
func (s *server) setupRouting() {
baseRouter := http.NewServeMux()
baseRouter.Handle("/metrics", promhttp.InstrumentMetricHandler(
s.metricsRegistry,
promhttp.HandlerFor(s.metricsRegistry, promhttp.HandlerOpts{}),
baseRouter.Handle("/metrics", web.ChainHandlers(
logging.SetAccessLogLevelHandler(0), // suppress access log messages
web.FinalHandler(promhttp.InstrumentMetricHandler(
s.metricsRegistry,
promhttp.HandlerFor(s.metricsRegistry, promhttp.HandlerOpts{}),
)),
))
router := mux.NewRouter()
......@@ -38,8 +41,14 @@ func (s *server) setupRouting() {
router.Handle("/debug/vars", expvar.Handler())
router.HandleFunc("/health", s.statusHandler)
router.HandleFunc("/readiness", s.statusHandler)
router.Handle("/health", web.ChainHandlers(
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{
"GET": http.HandlerFunc(s.addressesHandler),
......
......@@ -12,14 +12,20 @@ import (
"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 {
return func(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
startTime := time.Now()
rl := &responseLogger{w, 0, 0}
rl := &responseLogger{w, 0, 0, level}
h.ServeHTTP(rl, r)
if rl.level == 0 {
return
}
status := rl.status
if status == 0 {
status = http.StatusOK
......@@ -49,7 +55,21 @@ func NewHTTPAccessLogHandler(logger Logger, level logrus.Level, message string)
if v := r.Header.Get("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 {
w http.ResponseWriter
status int
size int
level logrus.Level
}
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