From 020fd7b155e68f15cae03c1586da603b4c281d91 Mon Sep 17 00:00:00 2001 From: Michel Palourdio Date: Tue, 10 Dec 2024 18:15:01 +0100 Subject: [PATCH 1/2] Add property to specify the management access log prefix See gh-43434 --- .../server/ManagementServerProperties.java | 24 ++++++++++++ ...etManagementChildContextConfiguration.java | 39 ++++++++++++++----- .../ManagementServerPropertiesTests.java | 6 +++ 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java index e476398f541..1e7495e61c2 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java @@ -57,6 +57,8 @@ public class ManagementServerProperties { @NestedConfigurationProperty private Ssl ssl; + private final Accesslog accesslog = new Accesslog(); + /** * Returns the management port or {@code null} if the * {@link ServerProperties#getPort() server port} should be used. @@ -117,4 +119,26 @@ public class ManagementServerProperties { return candidate; } + public Accesslog getAccesslog() { + return this.accesslog; + } + + public static class Accesslog { + + /** + * Enable management access logs prefix customization + * management.server.accesslog.prefix. + */ + private String prefix = "management_"; + + public String getPrefix() { + return this.prefix; + } + + public void setPrefix(String prefix) { + this.prefix = prefix; + } + + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java index 71beda39b6b..e382f0476c0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java @@ -47,6 +47,7 @@ import org.springframework.boot.autoconfigure.web.embedded.UndertowWebServerFact import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.TomcatServletWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.UndertowServletWebServerFactoryCustomizer; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; @@ -73,6 +74,7 @@ import org.springframework.util.StringUtils; */ @ManagementContextConfiguration(value = ManagementContextType.CHILD, proxyBeanMethods = false) @ConditionalOnWebApplication(type = Type.SERVLET) +@EnableConfigurationProperties(ManagementServerProperties.class) class ServletManagementChildContextConfiguration { @Bean @@ -83,20 +85,22 @@ class ServletManagementChildContextConfiguration { @Bean @ConditionalOnClass(name = "io.undertow.Undertow") - UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer() { - return new UndertowAccessLogCustomizer(); + UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer( + ManagementServerProperties managementServerProperties) { + return new UndertowAccessLogCustomizer(managementServerProperties); } @Bean @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve") - TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer() { - return new TomcatAccessLogCustomizer(); + TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer( + ManagementServerProperties managementServerProperties) { + return new TomcatAccessLogCustomizer(managementServerProperties); } @Bean @ConditionalOnClass(name = "org.eclipse.jetty.server.Server") - JettyAccessLogCustomizer jettyManagementAccessLogCustomizer() { - return new JettyAccessLogCustomizer(); + JettyAccessLogCustomizer jettyManagementAccessLogCustomizer(ManagementServerProperties managementServerProperties) { + return new JettyAccessLogCustomizer(managementServerProperties); } @Configuration(proxyBeanMethods = false) @@ -145,14 +149,18 @@ class ServletManagementChildContextConfiguration { abstract static class AccessLogCustomizer implements Ordered { - private static final String MANAGEMENT_PREFIX = "management_"; + protected final ManagementServerProperties managementServerProperties; + + AccessLogCustomizer(ManagementServerProperties managementServerProperties) { + this.managementServerProperties = managementServerProperties; + } protected String customizePrefix(String prefix) { prefix = (prefix != null) ? prefix : ""; - if (prefix.startsWith(MANAGEMENT_PREFIX)) { + if (prefix.startsWith(this.managementServerProperties.getAccesslog().getPrefix())) { return prefix; } - return MANAGEMENT_PREFIX + prefix; + return this.managementServerProperties.getAccesslog().getPrefix() + prefix; } @Override @@ -165,12 +173,17 @@ class ServletManagementChildContextConfiguration { static class TomcatAccessLogCustomizer extends AccessLogCustomizer implements WebServerFactoryCustomizer { + TomcatAccessLogCustomizer(ManagementServerProperties managementServerProperties) { + super(managementServerProperties); + } + @Override public void customize(TomcatServletWebServerFactory factory) { AccessLogValve accessLogValve = findAccessLogValve(factory); if (accessLogValve == null) { return; } + accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix())); } @@ -188,6 +201,10 @@ class ServletManagementChildContextConfiguration { static class UndertowAccessLogCustomizer extends AccessLogCustomizer implements WebServerFactoryCustomizer { + UndertowAccessLogCustomizer(ManagementServerProperties managementServerProperties) { + super(managementServerProperties); + } + @Override public void customize(UndertowServletWebServerFactory factory) { factory.setAccessLogPrefix(customizePrefix(factory.getAccessLogPrefix())); @@ -198,6 +215,10 @@ class ServletManagementChildContextConfiguration { static class JettyAccessLogCustomizer extends AccessLogCustomizer implements WebServerFactoryCustomizer { + JettyAccessLogCustomizer(ManagementServerProperties managementServerProperties) { + super(managementServerProperties); + } + @Override public void customize(JettyServletWebServerFactory factory) { factory.addServerCustomizers(this::customizeServer); diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java index 8ab33edfe81..9d28255f461 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerPropertiesTests.java @@ -68,4 +68,10 @@ class ManagementServerPropertiesTests { assertThat(properties.getBasePath()).isEmpty(); } + @Test + void accessLogsArePrefixedByDefault() { + ManagementServerProperties properties = new ManagementServerProperties(); + assertThat(properties.getAccesslog().getPrefix()).isEqualTo("management_"); + } + } From bcf075b53e85fefc67bdd1e81fef7c4cc0165b3e Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Wed, 15 Jan 2025 14:27:56 +0100 Subject: [PATCH 2/2] Polish "Add property to specify the management access log prefix" See gh-43434 --- .../server/ManagementServerProperties.java | 3 +- ...etManagementChildContextConfiguration.java | 39 +++++++++---------- 2 files changed, 19 insertions(+), 23 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java index 1e7495e61c2..2bce5868391 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/server/ManagementServerProperties.java @@ -126,8 +126,7 @@ public class ManagementServerProperties { public static class Accesslog { /** - * Enable management access logs prefix customization - * management.server.accesslog.prefix. + * Management log file name prefix. */ private String prefix = "management_"; diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java index e382f0476c0..8aa596dd446 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/web/servlet/ServletManagementChildContextConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -85,22 +85,20 @@ class ServletManagementChildContextConfiguration { @Bean @ConditionalOnClass(name = "io.undertow.Undertow") - UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer( - ManagementServerProperties managementServerProperties) { - return new UndertowAccessLogCustomizer(managementServerProperties); + UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer(ManagementServerProperties properties) { + return new UndertowAccessLogCustomizer(properties); } @Bean @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve") - TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer( - ManagementServerProperties managementServerProperties) { - return new TomcatAccessLogCustomizer(managementServerProperties); + TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer(ManagementServerProperties properties) { + return new TomcatAccessLogCustomizer(properties); } @Bean @ConditionalOnClass(name = "org.eclipse.jetty.server.Server") - JettyAccessLogCustomizer jettyManagementAccessLogCustomizer(ManagementServerProperties managementServerProperties) { - return new JettyAccessLogCustomizer(managementServerProperties); + JettyAccessLogCustomizer jettyManagementAccessLogCustomizer(ManagementServerProperties properties) { + return new JettyAccessLogCustomizer(properties); } @Configuration(proxyBeanMethods = false) @@ -149,18 +147,18 @@ class ServletManagementChildContextConfiguration { abstract static class AccessLogCustomizer implements Ordered { - protected final ManagementServerProperties managementServerProperties; + private final ManagementServerProperties properties; - AccessLogCustomizer(ManagementServerProperties managementServerProperties) { - this.managementServerProperties = managementServerProperties; + AccessLogCustomizer(ManagementServerProperties properties) { + this.properties = properties; } protected String customizePrefix(String prefix) { prefix = (prefix != null) ? prefix : ""; - if (prefix.startsWith(this.managementServerProperties.getAccesslog().getPrefix())) { + if (prefix.startsWith(this.properties.getAccesslog().getPrefix())) { return prefix; } - return this.managementServerProperties.getAccesslog().getPrefix() + prefix; + return this.properties.getAccesslog().getPrefix() + prefix; } @Override @@ -173,8 +171,8 @@ class ServletManagementChildContextConfiguration { static class TomcatAccessLogCustomizer extends AccessLogCustomizer implements WebServerFactoryCustomizer { - TomcatAccessLogCustomizer(ManagementServerProperties managementServerProperties) { - super(managementServerProperties); + TomcatAccessLogCustomizer(ManagementServerProperties properties) { + super(properties); } @Override @@ -183,7 +181,6 @@ class ServletManagementChildContextConfiguration { if (accessLogValve == null) { return; } - accessLogValve.setPrefix(customizePrefix(accessLogValve.getPrefix())); } @@ -201,8 +198,8 @@ class ServletManagementChildContextConfiguration { static class UndertowAccessLogCustomizer extends AccessLogCustomizer implements WebServerFactoryCustomizer { - UndertowAccessLogCustomizer(ManagementServerProperties managementServerProperties) { - super(managementServerProperties); + UndertowAccessLogCustomizer(ManagementServerProperties properties) { + super(properties); } @Override @@ -215,8 +212,8 @@ class ServletManagementChildContextConfiguration { static class JettyAccessLogCustomizer extends AccessLogCustomizer implements WebServerFactoryCustomizer { - JettyAccessLogCustomizer(ManagementServerProperties managementServerProperties) { - super(managementServerProperties); + JettyAccessLogCustomizer(ManagementServerProperties properties) { + super(properties); } @Override