diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java index 682dda50c0d4..3c289619bacc 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java @@ -846,6 +846,16 @@ public static class Accesslog { */ private boolean logLatency; + /** + * Set request paths that will not be logged. + */ + private List ignorePaths; + + /** + * true - IP address from header will be logged, false - IP address from the connection will be logged + */ + private boolean preferProxiedForAddress = false; + public boolean isEnabled() { return this.enabled; } @@ -942,6 +952,21 @@ public void setLogLatency(boolean logLatency) { this.logLatency = logLatency; } + public List getIgnorePaths() { + return ignorePaths; + } + + public void setIgnorePaths(List ignorePaths) { + this.ignorePaths = ignorePaths; + } + + public boolean getPreferProxiedForAddress(){ + return preferProxiedForAddress; + } + + public void setPreferProxiedForAddress(boolean preferProxiedForAddress){ + this.preferProxiedForAddress = preferProxiedForAddress; + } } } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java index af50cb504800..b97c2faf8df0 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java @@ -167,9 +167,13 @@ private void customizeAccessLog(ConfigurableJettyWebServerFactory factory, if (properties.getTimeZone() != null) { log.setLogTimeZone(properties.getTimeZone().getID()); } + if (properties.getIgnorePaths() != null) { + log.setIgnorePaths(properties.getIgnorePaths().toArray(new String[0])); + } log.setLogCookies(properties.isLogCookies()); log.setLogServer(properties.isLogServer()); log.setLogLatency(properties.isLogLatency()); + log.setPreferProxiedForAddress(properties.getPreferProxiedForAddress()); server.setRequestLog(log); }); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java index d09db2f56e00..c3b68805615f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java @@ -190,6 +190,8 @@ public void testCustomizeJettyAccessLog() { map.put("server.jetty.accesslog.file-date-format", "yyyymmdd"); map.put("server.jetty.accesslog.retention-period", "4"); map.put("server.jetty.accesslog.append", "true"); + map.put("server.jetty.accesslog.ignore-paths[0]", "/a/path"); + map.put("server.jetty.accesslog.ignore-paths[1]", "/b/path"); bind(map); ServerProperties.Jetty jetty = this.properties.getJetty(); assertThat(jetty.getAccesslog().isEnabled()).isTrue(); @@ -197,6 +199,9 @@ public void testCustomizeJettyAccessLog() { assertThat(jetty.getAccesslog().getFileDateFormat()).isEqualTo("yyyymmdd"); assertThat(jetty.getAccesslog().getRetentionPeriod()).isEqualTo(4); assertThat(jetty.getAccesslog().isAppend()).isTrue(); + assertThat(jetty.getAccesslog().getIgnorePaths().size()).isEqualTo(2); + assertThat(jetty.getAccesslog().getIgnorePaths().get(0)).isEqualTo("/a/path"); + assertThat(jetty.getAccesslog().getIgnorePaths().get(1)).isEqualTo("/b/path"); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java index 30920afb8175..f414fe967a3d 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java @@ -16,13 +16,16 @@ package org.springframework.boot.autoconfigure.web.embedded; +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.TimeZone; - import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.HttpConfiguration; import org.eclipse.jetty.server.HttpConfiguration.ConnectionFactory; @@ -30,7 +33,6 @@ import org.eclipse.jetty.server.RequestLog; import org.junit.Before; import org.junit.Test; - import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.bind.Bindable; import org.springframework.boot.context.properties.bind.Binder; @@ -41,10 +43,6 @@ import org.springframework.mock.env.MockEnvironment; import org.springframework.test.context.support.TestPropertySourceUtils; -import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; - /** * Tests for {@link JettyWebServerFactoryCustomizer}. * @@ -101,7 +99,10 @@ public void accessLogCanBeCustomized() throws IOException { "server.jetty.accesslog.time-zone=" + timezone, "server.jetty.accesslog.log-cookies=true", "server.jetty.accesslog.log-server=true", - "server.jetty.accesslog.log-latency=true"); + "server.jetty.accesslog.log-latency=true", + "server.jetty.accesslog.prefer-proxied-for-address=true", + "server.jetty.accesslog.ignore-paths[0]=/a/path", + "server.jetty.accesslog.ignore-paths[1]=/b/path"); JettyWebServer server = customizeAndGetServer(); NCSARequestLog requestLog = getNCSARequestLog(server); assertThat(requestLog.getFilename()).isEqualTo(logFile.getAbsolutePath()); @@ -115,6 +116,10 @@ public void accessLogCanBeCustomized() throws IOException { assertThat(requestLog.getLogCookies()).isTrue(); assertThat(requestLog.getLogServer()).isTrue(); assertThat(requestLog.getLogLatency()).isTrue(); + assertThat(requestLog.getPreferProxiedForAddress()).isTrue(); + assertThat(requestLog.getIgnorePaths().length).isEqualTo(2); + assertThat(requestLog.getIgnorePaths()[0]).isEqualTo("/a/path"); + assertThat(requestLog.getIgnorePaths()[1]).isEqualTo("/b/path"); } @Test @@ -128,6 +133,8 @@ public void accessLogCanBeEnabled() { assertThat(requestLog.getLogCookies()).isFalse(); assertThat(requestLog.getLogServer()).isFalse(); assertThat(requestLog.getLogLatency()).isFalse(); + assertThat(requestLog.getIgnorePaths().length).isZero(); + assertThat(requestLog.getPreferProxiedForAddress()).isFalse(); } private NCSARequestLog getNCSARequestLog(JettyWebServer server) {