Skip to content

Commit 55a5a26

Browse files
nhomblesnicoll
authored andcommitted
Complete Jetty Access Log configuration properties support
See gh-16080
1 parent a0b65a0 commit 55a5a26

File tree

4 files changed

+48
-7
lines changed

4 files changed

+48
-7
lines changed

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/ServerProperties.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -948,6 +948,16 @@ public static class Accesslog {
948948
*/
949949
private boolean logLatency;
950950

951+
/**
952+
* Set request paths that will not be logged.
953+
*/
954+
private List<String> ignorePaths;
955+
956+
/**
957+
* true - IP address from header will be logged, false - IP address from the connection will be logged
958+
*/
959+
private boolean preferProxiedForAddress = false;
960+
951961
public boolean isEnabled() {
952962
return this.enabled;
953963
}
@@ -1044,6 +1054,21 @@ public void setLogLatency(boolean logLatency) {
10441054
this.logLatency = logLatency;
10451055
}
10461056

1057+
public List<String> getIgnorePaths() {
1058+
return ignorePaths;
1059+
}
1060+
1061+
public void setIgnorePaths(List<String> ignorePaths) {
1062+
this.ignorePaths = ignorePaths;
1063+
}
1064+
1065+
public boolean getPreferProxiedForAddress(){
1066+
return preferProxiedForAddress;
1067+
}
1068+
1069+
public void setPreferProxiedForAddress(boolean preferProxiedForAddress){
1070+
this.preferProxiedForAddress = preferProxiedForAddress;
1071+
}
10471072
}
10481073

10491074
}

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizer.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,13 @@ private void customizeAccessLog(ConfigurableJettyWebServerFactory factory,
167167
if (properties.getTimeZone() != null) {
168168
log.setLogTimeZone(properties.getTimeZone().getID());
169169
}
170+
if (properties.getIgnorePaths() != null) {
171+
log.setIgnorePaths(properties.getIgnorePaths().toArray(new String[0]));
172+
}
170173
log.setLogCookies(properties.isLogCookies());
171174
log.setLogServer(properties.isLogServer());
172175
log.setLogLatency(properties.isLogLatency());
176+
log.setPreferProxiedForAddress(properties.getPreferProxiedForAddress());
173177
server.setRequestLog(log);
174178
});
175179
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/ServerPropertiesTests.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,18 @@ public void testCustomizeJettyAccessLog() {
231231
map.put("server.jetty.accesslog.file-date-format", "yyyymmdd");
232232
map.put("server.jetty.accesslog.retention-period", "4");
233233
map.put("server.jetty.accesslog.append", "true");
234+
map.put("server.jetty.accesslog.ignore-paths[0]", "/a/path");
235+
map.put("server.jetty.accesslog.ignore-paths[1]", "/b/path");
234236
bind(map);
235237
ServerProperties.Jetty jetty = this.properties.getJetty();
236238
assertThat(jetty.getAccesslog().isEnabled()).isTrue();
237239
assertThat(jetty.getAccesslog().getFilename()).isEqualTo("foo.txt");
238240
assertThat(jetty.getAccesslog().getFileDateFormat()).isEqualTo("yyyymmdd");
239241
assertThat(jetty.getAccesslog().getRetentionPeriod()).isEqualTo(4);
240242
assertThat(jetty.getAccesslog().isAppend()).isTrue();
243+
assertThat(jetty.getAccesslog().getIgnorePaths().size()).isEqualTo(2);
244+
assertThat(jetty.getAccesslog().getIgnorePaths().get(0)).isEqualTo("/a/path");
245+
assertThat(jetty.getAccesslog().getIgnorePaths().get(1)).isEqualTo("/b/path");
241246
}
242247

243248
@Test

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/web/embedded/JettyWebServerFactoryCustomizerTests.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@
1616

1717
package org.springframework.boot.autoconfigure.web.embedded;
1818

19+
import static org.assertj.core.api.Assertions.assertThat;
20+
import static org.mockito.Mockito.mock;
21+
import static org.mockito.Mockito.verify;
22+
1923
import java.io.File;
2024
import java.io.IOException;
2125
import java.util.ArrayList;
2226
import java.util.List;
2327
import java.util.Locale;
2428
import java.util.TimeZone;
25-
2629
import org.eclipse.jetty.server.Connector;
2730
import org.eclipse.jetty.server.HttpConfiguration;
2831
import org.eclipse.jetty.server.HttpConfiguration.ConnectionFactory;
2932
import org.eclipse.jetty.server.NCSARequestLog;
3033
import org.eclipse.jetty.server.RequestLog;
3134
import org.junit.Before;
3235
import org.junit.Test;
33-
3436
import org.springframework.boot.autoconfigure.web.ServerProperties;
3537
import org.springframework.boot.context.properties.bind.Bindable;
3638
import org.springframework.boot.context.properties.bind.Binder;
@@ -41,10 +43,6 @@
4143
import org.springframework.mock.env.MockEnvironment;
4244
import org.springframework.test.context.support.TestPropertySourceUtils;
4345

44-
import static org.assertj.core.api.Assertions.assertThat;
45-
import static org.mockito.Mockito.mock;
46-
import static org.mockito.Mockito.verify;
47-
4846
/**
4947
* Tests for {@link JettyWebServerFactoryCustomizer}.
5048
*
@@ -101,7 +99,10 @@ public void accessLogCanBeCustomized() throws IOException {
10199
"server.jetty.accesslog.time-zone=" + timezone,
102100
"server.jetty.accesslog.log-cookies=true",
103101
"server.jetty.accesslog.log-server=true",
104-
"server.jetty.accesslog.log-latency=true");
102+
"server.jetty.accesslog.log-latency=true",
103+
"server.jetty.accesslog.prefer-proxied-for-address=true",
104+
"server.jetty.accesslog.ignore-paths[0]=/a/path",
105+
"server.jetty.accesslog.ignore-paths[1]=/b/path");
105106
JettyWebServer server = customizeAndGetServer();
106107
NCSARequestLog requestLog = getNCSARequestLog(server);
107108
assertThat(requestLog.getFilename()).isEqualTo(logFile.getAbsolutePath());
@@ -115,6 +116,10 @@ public void accessLogCanBeCustomized() throws IOException {
115116
assertThat(requestLog.getLogCookies()).isTrue();
116117
assertThat(requestLog.getLogServer()).isTrue();
117118
assertThat(requestLog.getLogLatency()).isTrue();
119+
assertThat(requestLog.getPreferProxiedForAddress()).isTrue();
120+
assertThat(requestLog.getIgnorePaths().length).isEqualTo(2);
121+
assertThat(requestLog.getIgnorePaths()[0]).isEqualTo("/a/path");
122+
assertThat(requestLog.getIgnorePaths()[1]).isEqualTo("/b/path");
118123
}
119124

120125
@Test
@@ -128,6 +133,8 @@ public void accessLogCanBeEnabled() {
128133
assertThat(requestLog.getLogCookies()).isFalse();
129134
assertThat(requestLog.getLogServer()).isFalse();
130135
assertThat(requestLog.getLogLatency()).isFalse();
136+
assertThat(requestLog.getIgnorePaths().length).isZero();
137+
assertThat(requestLog.getPreferProxiedForAddress()).isFalse();
131138
}
132139

133140
private NCSARequestLog getNCSARequestLog(JettyWebServer server) {

0 commit comments

Comments
 (0)