diff --git a/internal/config.go b/internal/config.go index 655f9eb..f715e8e 100644 --- a/internal/config.go +++ b/internal/config.go @@ -33,7 +33,8 @@ const ( defaultHttpReadTimeout = 30 * time.Second defaultHttpWriteTimeout = 30 * time.Second - defaultLogLevel = slog.LevelInfo + defaultLogLevel = slog.LevelInfo + defaultLogRequests = true ) type Config struct { @@ -62,7 +63,8 @@ type Config struct { ForwardHeaders bool - LogLevel slog.Level + LogLevel slog.Level + LogRequests bool } func NewConfig() (*Config, error) { @@ -99,7 +101,8 @@ func NewConfig() (*Config, error) { HttpReadTimeout: getEnvDuration("HTTP_READ_TIMEOUT", defaultHttpReadTimeout), HttpWriteTimeout: getEnvDuration("HTTP_WRITE_TIMEOUT", defaultHttpWriteTimeout), - LogLevel: logLevel, + LogLevel: logLevel, + LogRequests: getEnvBool("LOG_REQUESTS", defaultLogRequests), } config.ForwardHeaders = getEnvBool("FORWARD_HEADERS", !config.HasTLS()) diff --git a/internal/config_test.go b/internal/config_test.go index 7446693..b8ad054 100644 --- a/internal/config_test.go +++ b/internal/config_test.go @@ -116,6 +116,7 @@ func TestConfig_override_defaults_with_env_vars(t *testing.T) { usingEnvVar(t, "GZIP_COMPRESSION_ENABLED", "0") usingEnvVar(t, "DEBUG", "1") usingEnvVar(t, "ACME_DIRECTORY", "https://acme-staging-v02.api.letsencrypt.org/directory") + usingEnvVar(t, "LOG_REQUESTS", "false") c, err := NewConfig() require.NoError(t, err) @@ -127,6 +128,7 @@ func TestConfig_override_defaults_with_env_vars(t *testing.T) { assert.Equal(t, false, c.GzipCompressionEnabled) assert.Equal(t, slog.LevelDebug, c.LogLevel) assert.Equal(t, "https://acme-staging-v02.api.letsencrypt.org/directory", c.ACMEDirectoryURL) + assert.Equal(t, false, c.LogRequests) } func TestConfig_override_defaults_with_env_vars_using_prefix(t *testing.T) { @@ -136,6 +138,7 @@ func TestConfig_override_defaults_with_env_vars_using_prefix(t *testing.T) { usingEnvVar(t, "THRUSTER_HTTP_READ_TIMEOUT", "5") usingEnvVar(t, "THRUSTER_X_SENDFILE_ENABLED", "0") usingEnvVar(t, "THRUSTER_DEBUG", "1") + usingEnvVar(t, "THRUSTER_LOG_REQUESTS", "0") c, err := NewConfig() require.NoError(t, err) @@ -145,6 +148,7 @@ func TestConfig_override_defaults_with_env_vars_using_prefix(t *testing.T) { assert.Equal(t, 5*time.Second, c.HttpReadTimeout) assert.Equal(t, false, c.XSendfileEnabled) assert.Equal(t, slog.LevelDebug, c.LogLevel) + assert.Equal(t, false, c.LogRequests) } func TestConfig_prefixed_variables_take_precedence_over_non_prefixed(t *testing.T) { diff --git a/internal/handler.go b/internal/handler.go index 1d016c4..16609cf 100644 --- a/internal/handler.go +++ b/internal/handler.go @@ -17,12 +17,15 @@ type HandlerOptions struct { xSendfileEnabled bool gzipCompressionEnabled bool forwardHeaders bool + logRequests bool } func NewHandler(options HandlerOptions) http.Handler { handler := NewProxyHandler(options.targetUrl, options.badGatewayPage, options.forwardHeaders) handler = NewCacheHandler(options.cache, options.maxCacheableResponseBody, handler) handler = NewSendfileHandler(options.xSendfileEnabled, handler) + handler = NewRequestStartMiddleware(handler) + if options.gzipCompressionEnabled { handler = gzhttp.GzipHandler(handler) } @@ -31,8 +34,9 @@ func NewHandler(options HandlerOptions) http.Handler { handler = http.MaxBytesHandler(handler, int64(options.maxRequestBody)) } - handler = NewRequestStartMiddleware(handler) - handler = NewLoggingMiddleware(slog.Default(), handler) + if options.logRequests { + handler = NewLoggingMiddleware(slog.Default(), handler) + } return handler } diff --git a/internal/handler_test.go b/internal/handler_test.go index 389241a..d427e23 100644 --- a/internal/handler_test.go +++ b/internal/handler_test.go @@ -293,5 +293,6 @@ func handlerOptions(targetUrl string) HandlerOptions { maxCacheableResponseBody: 1024, badGatewayPage: "", forwardHeaders: true, + logRequests: true, } } diff --git a/internal/service.go b/internal/service.go index 04fee25..e844783 100644 --- a/internal/service.go +++ b/internal/service.go @@ -27,6 +27,7 @@ func (s *Service) Run() int { maxRequestBody: s.config.MaxRequestBody, badGatewayPage: s.config.BadGatewayPage, forwardHeaders: s.config.ForwardHeaders, + logRequests: s.config.LogRequests, } handler := NewHandler(handlerOptions)