From b68fc6b17ebb4c197d10499cd32806399ae8dd10 Mon Sep 17 00:00:00 2001 From: Dmitrii Kozlov Date: Tue, 24 Dec 2024 12:33:21 +0200 Subject: [PATCH] log body size --- model/server_settings.go | 1 + model/server_settings_validation.go | 5 +++-- web/admin/router.go | 3 +++ web/api/routes.go | 3 +++ web/management/routes.go | 1 + web/middleware/logger.go | 10 +++++++++- web/spa/router.go | 3 +++ 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/model/server_settings.go b/model/server_settings.go index c6516b77..156239af 100644 --- a/model/server_settings.go +++ b/model/server_settings.go @@ -369,6 +369,7 @@ type LoggerSettings struct { // Deprecated: User HTTPDetailing on module level. DumpRequest bool `yaml:"dumpRequest" json:"dumpRequest"` Format string `yaml:"format" json:"format"` + MaxBodySize int `yaml:"maxBodySize" json:"maxBodySize"` LogSensitiveData bool `yaml:"logSensitiveData" json:"logSensitiveData"` Common LoggerParams `yaml:"common" json:"common"` API LoggerParams `yaml:"api" json:"api"` diff --git a/model/server_settings_validation.go b/model/server_settings_validation.go index 549d6bed..09ff9b47 100644 --- a/model/server_settings_validation.go +++ b/model/server_settings_validation.go @@ -1,6 +1,7 @@ package model import ( + "errors" "fmt" "net/url" "os" @@ -146,7 +147,7 @@ func (sss *SessionStorageSettings) Validate() []error { result := []error{} if len(sss.Type) == 0 { - result = append(result, fmt.Errorf("Empty session storage type")) + result = append(result, errors.New("empty session storage type")) } if sss.SessionDuration.Duration == 0 { result = append(result, fmt.Errorf("%s. Session duration is 0 seconds", subject)) @@ -226,7 +227,7 @@ func (sss *SMSServiceSettings) Validate() []error { subject := "SMSServiceSettings" result := []error{} if len(sss.Type) == 0 { - return []error{fmt.Errorf("Empty SMS service type")} + return []error{errors.New("empty SMS service type")} } switch sss.Type { diff --git a/web/admin/router.go b/web/admin/router.go index f7051365..6d29f880 100644 --- a/web/admin/router.go +++ b/web/admin/router.go @@ -57,6 +57,7 @@ func NewRouter(settings RouterSettings) (model.Router, error) { ar.middleware = buildMiddleware( settings.LoggerSettings.DumpRequest, settings.LoggerSettings.Format, + settings.LoggerSettings.MaxBodySize, settings.LoggerSettings.Admin, settings.LoggerSettings.LogSensitiveData, settings.Cors) @@ -70,6 +71,7 @@ func NewRouter(settings RouterSettings) (model.Router, error) { func buildMiddleware( dumpRequest bool, format string, + maxBodySize int, logParams model.LoggerParams, logSensitiveData bool, corsHandler *cors.Cors, @@ -79,6 +81,7 @@ func buildMiddleware( lm := middleware.NegroniHTTPLogger( logging.ComponentAdmin, format, + maxBodySize, logParams, model.HTTPLogDetailing(dumpRequest, logParams.HTTPDetailing), !logSensitiveData, diff --git a/web/api/routes.go b/web/api/routes.go index 4f3d947e..f78a2b0d 100644 --- a/web/api/routes.go +++ b/web/api/routes.go @@ -28,6 +28,7 @@ func (ar *Router) initRoutes( baseMiddleware := buildBaseMiddleware( loggerSettings.DumpRequest, loggerSettings.Format, + loggerSettings.MaxBodySize, loggerSettings.API, loggerSettings.LogSensitiveData, ar.cors, @@ -58,6 +59,7 @@ func (ar *Router) initRoutes( func buildBaseMiddleware( dumpRequest bool, format string, + maxBodySize int, logParams model.LoggerParams, logSensitiveData bool, cors *cors.Cors, @@ -81,6 +83,7 @@ func buildBaseMiddleware( lm := middleware.NegroniHTTPLogger( logging.ComponentAPI, format, + maxBodySize, logParams, model.HTTPLogDetailing(dumpRequest, logParams.HTTPDetailing), !logSensitiveData, diff --git a/web/management/routes.go b/web/management/routes.go index 7881b570..8abfc1a7 100644 --- a/web/management/routes.go +++ b/web/management/routes.go @@ -16,6 +16,7 @@ func (ar *Router) initRoutes(loggerSettings model.LoggerSettings) { lm := imiddleware.HTTPLogger( logging.ComponentAPI, loggerSettings.Format, + loggerSettings.MaxBodySize, loggerSettings.Management, model.HTTPLogDetailing(loggerSettings.DumpRequest, loggerSettings.Management.HTTPDetailing), !loggerSettings.LogSensitiveData, diff --git a/web/middleware/logger.go b/web/middleware/logger.go index ae86f0f7..520e4dd8 100644 --- a/web/middleware/logger.go +++ b/web/middleware/logger.go @@ -15,12 +15,13 @@ import ( func NegroniHTTPLogger( component string, format string, + maxBodySize int, logParams model.LoggerParams, httpDetailing model.HTTPDetailing, excludeAuth bool, exclude ...string, ) negroni.Handler { - logger := HTTPLogger(component, format, logParams, httpDetailing, excludeAuth, exclude...) + logger := HTTPLogger(component, format, maxBodySize, logParams, httpDetailing, excludeAuth, exclude...) return negroni.HandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) { logger(next).ServeHTTP(w, r) @@ -34,6 +35,7 @@ func emptyMiddleware(next http.Handler) http.Handler { func HTTPLogger( component string, format string, + maxBodySize int, logParams model.LoggerParams, httpDetailing model.HTTPDetailing, excludeAuth bool, @@ -96,6 +98,12 @@ func HTTPLogger( return true, logBody(r.URL.Path) })) + if maxBodySize <= 0 { + maxBodySize = httpdump.DefaultBodySize + } + + opts = append(opts, httpdump.WithLimitedBody(maxBodySize)) + hd := httpdump.NewMiddlewareWrapper(dumpReq, dumpResp, opts...) return hd } diff --git a/web/spa/router.go b/web/spa/router.go index 63c21c64..cf934f03 100644 --- a/web/spa/router.go +++ b/web/spa/router.go @@ -24,6 +24,7 @@ func NewRouter(setting SPASettings, middlewares []negroni.Handler) (model.Router setting.Name, setting.LoggerSettings.DumpRequest, setting.LoggerSettings.Format, + setting.LoggerSettings.MaxBodySize, setting.LoggerSettings.SPA, !setting.LoggerSettings.LogSensitiveData, middlewares, @@ -50,6 +51,7 @@ func buildMiddleware( settingName string, dumpRequest bool, format string, + maxBodySize int, logParams model.LoggerParams, logSensitiveData bool, middlewares []negroni.Handler, @@ -57,6 +59,7 @@ func buildMiddleware( lm := middleware.NegroniHTTPLogger( settingName, format, + maxBodySize, logParams, model.HTTPLogDetailing(dumpRequest, logParams.HTTPDetailing), !logSensitiveData,