From a75b01907d09d77a7fbf498ece10a716c3359ef9 Mon Sep 17 00:00:00 2001 From: maicon Date: Fri, 10 Oct 2025 17:23:45 -0300 Subject: [PATCH] Log TLS handshake EOF error as DEBUG instead INFO (#112294) * Log TLS handshake EOF error as DEBUG instead INFO Signed-off-by: Maicon Costa --------- Signed-off-by: Maicon Costa --- pkg/api/http_server.go | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/pkg/api/http_server.go b/pkg/api/http_server.go index a4c00ed10e4..d8b252ba406 100644 --- a/pkg/api/http_server.go +++ b/pkg/api/http_server.go @@ -12,6 +12,7 @@ import ( "encoding/pem" "errors" "fmt" + stdlog "log" "math/big" "net" "net/http" @@ -399,6 +400,26 @@ func (hs *HTTPServer) AddNamedMiddleware(middleware routing.RegisterNamedMiddlew hs.namedMiddlewares = append(hs.namedMiddlewares, middleware) } +type customErrorLogger struct { + log log.Logger +} + +const tlsHandshakeErrorPrefix = "http: TLS handshake error from" +const tlsHandshakeErrorSuffix = "EOF" + +func (w *customErrorLogger) Write(msg []byte) (int, error) { + // checks if the error is a TLS handshake error that ends with EOF + if strings.Contains(string(msg), tlsHandshakeErrorPrefix) && strings.Contains(string(msg), tlsHandshakeErrorSuffix) { + // log at debug level and remove new lines + w.log.Debug(strings.ReplaceAll(string(msg), "\n", "")) + } else { + // log the error as is using the standard logger (the same way as the default http server does) + stdlog.Print(string(msg)) + } + + return len(msg), nil +} + func (hs *HTTPServer) Run(ctx context.Context) error { hs.context = ctx @@ -411,6 +432,12 @@ func (hs *HTTPServer) Run(ctx context.Context) error { Handler: hs.web, ReadTimeout: hs.Cfg.ReadTimeout, } + + customErrorLogger := &customErrorLogger{ + log: hs.log, + } + hs.httpSrv.ErrorLog = stdlog.New(customErrorLogger, "", 0) + switch hs.Cfg.Protocol { case setting.HTTP2Scheme, setting.HTTPSScheme: if err := hs.configureTLS(); err != nil {