diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml index 130f4cc33b5..2214d449437 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/pom.xml @@ -1,5 +1,6 @@ - 4.0.0 @@ -258,6 +259,11 @@ aspectjweaver true + + org.eclipse.jetty + jetty-server + true + org.elasticsearch elasticsearch @@ -602,20 +608,27 @@ true - - + + - - - - + + + + - + @@ -629,10 +642,12 @@ - - 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 9457d80db86..93c2cc0b9c0 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 @@ -16,10 +16,15 @@ package org.springframework.boot.actuate.autoconfigure.web.servlet; +import java.io.File; + import javax.servlet.Filter; import org.apache.catalina.Valve; import org.apache.catalina.valves.AccessLogValve; +import org.eclipse.jetty.server.NCSARequestLog; +import org.eclipse.jetty.server.RequestLog; +import org.eclipse.jetty.server.Server; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.HierarchicalBeanFactory; @@ -39,6 +44,7 @@ import org.springframework.boot.autoconfigure.web.embedded.TomcatWebServerFactor import org.springframework.boot.autoconfigure.web.embedded.UndertowWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.ServletWebServerFactoryCustomizer; import org.springframework.boot.autoconfigure.web.servlet.TomcatServletWebServerFactoryCustomizer; +import org.springframework.boot.web.embedded.jetty.JettyServletWebServerFactory; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.embedded.undertow.UndertowServletWebServerFactory; import org.springframework.boot.web.server.WebServerFactoryCustomizer; @@ -48,6 +54,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.security.config.BeanIds; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.util.StringUtils; /** * {@link ManagementContextConfiguration} for Servlet web endpoint infrastructure when a @@ -71,16 +78,22 @@ class ServletManagementChildContextConfiguration { @Bean @ConditionalOnClass(name = "io.undertow.Undertow") - public UndertowAccessLogCustomizer undertowAccessLogCustomizer() { + public UndertowAccessLogCustomizer undertowManagementAccessLogCustomizer() { return new UndertowAccessLogCustomizer(); } @Bean @ConditionalOnClass(name = "org.apache.catalina.valves.AccessLogValve") - public TomcatAccessLogCustomizer tomcatAccessLogCustomizer() { + public TomcatAccessLogCustomizer tomcatManagementAccessLogCustomizer() { return new TomcatAccessLogCustomizer(); } + @Bean + @ConditionalOnClass(name = "org.eclipse.jetty.server.Server") + public JettyAccessLogCustomizer jettyManagementAccessLogCustomizer() { + return new JettyAccessLogCustomizer(); + } + @Configuration @ConditionalOnClass({ EnableWebSecurity.class, Filter.class }) @ConditionalOnBean(name = BeanIds.SPRING_SECURITY_FILTER_CHAIN, search = SearchStrategy.ANCESTORS) @@ -119,8 +132,14 @@ class ServletManagementChildContextConfiguration { abstract static class AccessLogCustomizer implements Ordered { + private static final String MANAGEMENT_PREFIX = "management_"; + protected String customizePrefix(String prefix) { - return "management_" + prefix; + prefix = (prefix != null) ? prefix : ""; + if (prefix.startsWith(MANAGEMENT_PREFIX)) { + return prefix; + } + return MANAGEMENT_PREFIX + prefix; } @Override @@ -163,4 +182,30 @@ class ServletManagementChildContextConfiguration { } + static class JettyAccessLogCustomizer extends AccessLogCustomizer + implements WebServerFactoryCustomizer { + + @Override + public void customize(JettyServletWebServerFactory factory) { + factory.addServerCustomizers(this::customizeServer); + } + + private void customizeServer(Server server) { + RequestLog requestLog = server.getRequestLog(); + if (requestLog != null && requestLog instanceof NCSARequestLog) { + customizeRequestLog((NCSARequestLog) requestLog); + } + } + + private void customizeRequestLog(NCSARequestLog requestLog) { + String filename = requestLog.getFilename(); + if (StringUtils.hasLength(filename)) { + File file = new File(filename); + file = new File(file.getParentFile(), customizePrefix(file.getName())); + requestLog.setFilename(file.getPath()); + } + } + + } + }