From 1ab47e622a5f138b9d8e060457027a8d2cc30d08 Mon Sep 17 00:00:00 2001 From: =?utf8?q?S=C3=A9bastien=20Lesaint?= Date: Fri, 18 Nov 2016 09:46:09 +0100 Subject: [PATCH] SONAR-8332 fix missing SQ HTTP request ID from Web logs (for good) --- .../server/app/WebServerProcessLogging.java | 3 +- .../web/requestid/RequestIdFilter.java | 19 +-------- .../web/requestid/RequestIdMDCStorage.java | 40 +++++++++++++++++++ .../app/WebServerProcessLoggingTest.java | 2 +- 4 files changed, 44 insertions(+), 20 deletions(-) create mode 100644 server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java diff --git a/server/sonar-server/src/main/java/org/sonar/server/app/WebServerProcessLogging.java b/server/sonar-server/src/main/java/org/sonar/server/app/WebServerProcessLogging.java index 42c6bbfd19c..6b101065be5 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/app/WebServerProcessLogging.java +++ b/server/sonar-server/src/main/java/org/sonar/server/app/WebServerProcessLogging.java @@ -26,6 +26,7 @@ import org.sonar.process.ProcessId; import org.sonar.process.Props; import static org.sonar.process.LogbackHelper.LogDomain; +import static org.sonar.server.platform.web.requestid.RequestIdMDCStorage.HTTP_REQUEST_ID_MDC_KEY; /** * Configure logback for the Web Server process. Logs are written to file "web.log" in SQ's log directory. @@ -33,7 +34,7 @@ import static org.sonar.process.LogbackHelper.LogDomain; public class WebServerProcessLogging extends ServerProcessLogging { public WebServerProcessLogging() { - super(ProcessId.WEB_SERVER, "%X{ID}"); + super(ProcessId.WEB_SERVER, "%X{" + HTTP_REQUEST_ID_MDC_KEY + "}"); } @Override diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java b/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java index cc2ee2841f7..c7502c51e05 100644 --- a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdFilter.java @@ -27,15 +27,13 @@ import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; -import org.slf4j.MDC; import org.sonar.server.platform.Platform; -import static java.util.Objects.requireNonNull; - /** * A {@link Filter} that puts and removes the HTTP request ID from the {@link org.slf4j.MDC}. */ public class RequestIdFilter implements Filter { + private final Platform platform; public RequestIdFilter() { @@ -72,19 +70,4 @@ public class RequestIdFilter implements Filter { // nothing to do } - /** - * Wraps MDC calls to store the HTTP request ID in the {@link MDC} into an {@link AutoCloseable}. - */ - static class RequestIdMDCStorage implements AutoCloseable { - private static final String HTTP_REQUEST_ID_MDC_KEY = "HTTP_REQUEST_ID"; - - public RequestIdMDCStorage(String requestId) { - MDC.put(HTTP_REQUEST_ID_MDC_KEY, requireNonNull(requestId, "Request ID can't be null")); - } - - @Override - public void close() { - MDC.remove(HTTP_REQUEST_ID_MDC_KEY); - } - } } diff --git a/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java b/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java new file mode 100644 index 00000000000..f9dbb861fa5 --- /dev/null +++ b/server/sonar-server/src/main/java/org/sonar/server/platform/web/requestid/RequestIdMDCStorage.java @@ -0,0 +1,40 @@ +/* + * SonarQube + * Copyright (C) 2009-2016 SonarSource SA + * mailto:contact AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.sonar.server.platform.web.requestid; + +import org.slf4j.MDC; + +import static java.util.Objects.requireNonNull; + +/** + * Wraps MDC calls to store the HTTP request ID in the {@link MDC} into an {@link AutoCloseable}. + */ +public class RequestIdMDCStorage implements AutoCloseable { + public static final String HTTP_REQUEST_ID_MDC_KEY = "HTTP_REQUEST_ID"; + + RequestIdMDCStorage(String requestId) { + MDC.put(HTTP_REQUEST_ID_MDC_KEY, requireNonNull(requestId, "Request ID can't be null")); + } + + @Override + public void close() { + MDC.remove(HTTP_REQUEST_ID_MDC_KEY); + } +} diff --git a/server/sonar-server/src/test/java/org/sonar/server/app/WebServerProcessLoggingTest.java b/server/sonar-server/src/test/java/org/sonar/server/app/WebServerProcessLoggingTest.java index 4cf2d80ea33..14bd48fbd21 100644 --- a/server/sonar-server/src/test/java/org/sonar/server/app/WebServerProcessLoggingTest.java +++ b/server/sonar-server/src/test/java/org/sonar/server/app/WebServerProcessLoggingTest.java @@ -85,7 +85,7 @@ public class WebServerProcessLoggingTest { assertThat(fileAppender.getFile()).isEqualTo(new File(logDir, "web.log").getAbsolutePath()); assertThat(fileAppender.getEncoder()).isInstanceOf(PatternLayoutEncoder.class); PatternLayoutEncoder encoder = (PatternLayoutEncoder) fileAppender.getEncoder(); - assertThat(encoder.getPattern()).isEqualTo("%d{yyyy.MM.dd HH:mm:ss} %-5level web[%X{ID}][%logger{20}] %msg%n"); + assertThat(encoder.getPattern()).isEqualTo("%d{yyyy.MM.dd HH:mm:ss} %-5level web[%X{HTTP_REQUEST_ID}][%logger{20}] %msg%n"); } @Test -- 2.39.5