diff --git a/internal/config.go b/internal/config.go index d0d2ce2..c297c91 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 { @@ -61,7 +62,8 @@ type Config struct { ForwardHeaders bool - LogLevel slog.Level + LogLevel slog.Level + LogRequests bool } func NewConfig() (*Config, error) { @@ -97,7 +99,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 c8415d9..7f43542 100644 --- a/internal/config_test.go +++ b/internal/config_test.go @@ -115,6 +115,7 @@ func TestConfig_override_defaults_with_env_vars(t *testing.T) { usingEnvVar(t, "X_SENDFILE_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) @@ -125,6 +126,7 @@ func TestConfig_override_defaults_with_env_vars(t *testing.T) { assert.Equal(t, false, c.XSendfileEnabled) 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) { @@ -134,6 +136,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) @@ -143,6 +146,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 11feac9..d1b94e8 100644 --- a/internal/handler.go +++ b/internal/handler.go @@ -16,6 +16,7 @@ type HandlerOptions struct { targetUrl *url.URL xSendfileEnabled bool forwardHeaders bool + logRequests bool } func NewHandler(options HandlerOptions) http.Handler { @@ -28,7 +29,9 @@ func NewHandler(options HandlerOptions) http.Handler { handler = http.MaxBytesHandler(handler, int64(options.maxRequestBody)) } - 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 a3485b6..6da8d14 100644 --- a/internal/handler_test.go +++ b/internal/handler_test.go @@ -251,5 +251,6 @@ func handlerOptions(targetUrl string) HandlerOptions { maxCacheableResponseBody: 1024, badGatewayPage: "", forwardHeaders: true, + logRequests: true, } } diff --git a/internal/service.go b/internal/service.go index 5418eb0..d38ba8b 100644 --- a/internal/service.go +++ b/internal/service.go @@ -26,6 +26,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)