You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by lh...@apache.org on 2021/08/24 11:32:14 UTC
[pulsar] branch master updated: Switch from deprecated
Slf4jRequestLog to CustomRequestLog (#11733)
This is an automated email from the ASF dual-hosted git repository.
lhotari pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new ac5fce5 Switch from deprecated Slf4jRequestLog to CustomRequestLog (#11733)
ac5fce5 is described below
commit ac5fce55e1394698072d0cbdd0e289bd289a217e
Author: Michael Marshall <mi...@datastax.com>
AuthorDate: Tue Aug 24 06:31:33 2021 -0500
Switch from deprecated Slf4jRequestLog to CustomRequestLog (#11733)
* Switch from deprecated Slf4jRequestLog to CustomRequestLog
* Make new class and new method names more accurate
---
.../pulsar/broker/web/JettyRequestLogFactory.java | 64 ++++++++++++++++++++++
.../org/apache/pulsar/broker/web/WebService.java | 8 +--
.../discovery/service/server/ServerManager.java | 9 +--
.../pulsar/functions/worker/rest/WorkerServer.java | 9 +--
.../org/apache/pulsar/proxy/server/WebServer.java | 9 +--
.../pulsar/websocket/service/ProxyServer.java | 9 +--
6 files changed, 73 insertions(+), 35 deletions(-)
diff --git a/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/JettyRequestLogFactory.java b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/JettyRequestLogFactory.java
new file mode 100644
index 0000000..8b9b507
--- /dev/null
+++ b/pulsar-broker-common/src/main/java/org/apache/pulsar/broker/web/JettyRequestLogFactory.java
@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.pulsar.broker.web;
+
+import java.util.TimeZone;
+import org.eclipse.jetty.server.CustomRequestLog;
+import org.eclipse.jetty.server.Slf4jRequestLogWriter;
+
+/**
+ * Class to standardize initialization of a Jetty request logger for all pulsar components.
+ */
+public class JettyRequestLogFactory {
+
+ /**
+ * The time format to use for request logging. This custom format is necessary because the
+ * default option uses GMT for the time zone. Pulsar's request logging has historically
+ * used the JVM's default time zone, so this format uses that time zone. It is also necessary
+ * because the {@link CustomRequestLog#DEFAULT_DATE_FORMAT} is "dd/MMM/yyyy:HH:mm:ss ZZZ" instead
+ * of "dd/MMM/yyyy:HH:mm:ss Z" (the old date format). The key difference is that ZZZ will render
+ * the strict offset for the timezone that is unaware of daylight savings time while the Z will
+ * render the offset based on daylight savings time.
+ *
+ * As the javadoc for {@link CustomRequestLog} describes, the time code can take two arguments to
+ * configure the format and the time zone. They must be in the form: "%{format|timeZone}t".
+ */
+ private static final String TIME_FORMAT = String.format(" %%{%s|%s}t ",
+ "dd/MMM/yyyy:HH:mm:ss Z",
+ TimeZone.getDefault().getID());
+
+ /**
+ * This format is essentially the {@link CustomRequestLog#EXTENDED_NCSA_FORMAT} with three modifications:
+ * 1. The time zone will be the JVM's default time zone instead of always being GMT.
+ * 2. The time zone offset will be daylight savings time aware.
+ * 3. The final value will be the request time (latency) in milliseconds.
+ *
+ * See javadoc for {@link CustomRequestLog} for more information.
+ */
+ private static final String LOG_FORMAT =
+ "%{client}a - %u" + TIME_FORMAT + "\"%r\" %s %O \"%{Referer}i\" \"%{User-Agent}i\" %{ms}T";
+
+ /**
+ * Build a new Jetty request logger using the format defined in this class.
+ * @return a request logger
+ */
+ public static CustomRequestLog createRequestLogger() {
+ return new CustomRequestLog(new Slf4jRequestLogWriter(), LOG_FORMAT);
+ }
+}
diff --git a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java
index 4d9ff83..e5e2ab1 100644
--- a/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java
+++ b/pulsar-broker/src/main/java/org/apache/pulsar/broker/web/WebService.java
@@ -26,7 +26,6 @@ import java.util.EnumSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.TimeZone;
import javax.servlet.DispatcherType;
import org.apache.pulsar.broker.PulsarServerException;
import org.apache.pulsar.broker.PulsarService;
@@ -36,7 +35,6 @@ import org.apache.pulsar.common.util.keystoretls.KeyStoreSSLContext;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.Slf4jRequestLog;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
@@ -213,11 +211,7 @@ public class WebService implements AutoCloseable {
public void start() throws PulsarServerException {
try {
RequestLogHandler requestLogHandler = new RequestLogHandler();
- Slf4jRequestLog requestLog = new Slf4jRequestLog();
- requestLog.setExtended(true);
- requestLog.setLogTimeZone(TimeZone.getDefault().getID());
- requestLog.setLogLatency(true);
- requestLogHandler.setRequestLog(requestLog);
+ requestLogHandler.setRequestLog(JettyRequestLogFactory.createRequestLogger());
handlers.add(0, new ContextHandlerCollection());
handlers.add(requestLogHandler);
diff --git a/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/server/ServerManager.java b/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/server/ServerManager.java
index 0c0bb95..7360aed 100644
--- a/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/server/ServerManager.java
+++ b/pulsar-discovery-service/src/main/java/org/apache/pulsar/discovery/service/server/ServerManager.java
@@ -23,15 +23,14 @@ import java.net.URI;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.TimeZone;
import javax.servlet.Servlet;
+import org.apache.pulsar.broker.web.JettyRequestLogFactory;
import org.apache.pulsar.common.util.RestException;
import org.apache.pulsar.common.util.SecurityUtility;
import org.apache.pulsar.common.util.keystoretls.KeyStoreSSLContext;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.Slf4jRequestLog;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
@@ -127,11 +126,7 @@ public class ServerManager {
public void start() throws Exception {
RequestLogHandler requestLogHandler = new RequestLogHandler();
- Slf4jRequestLog requestLog = new Slf4jRequestLog();
- requestLog.setExtended(true);
- requestLog.setLogTimeZone(TimeZone.getDefault().getID());
- requestLog.setLogLatency(true);
- requestLogHandler.setRequestLog(requestLog);
+ requestLogHandler.setRequestLog(JettyRequestLogFactory.createRequestLogger());
handlers.add(0, new ContextHandlerCollection());
handlers.add(requestLogHandler);
diff --git a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/WorkerServer.java b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/WorkerServer.java
index ee13063..c7414c2 100644
--- a/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/WorkerServer.java
+++ b/pulsar-functions/worker/src/main/java/org/apache/pulsar/functions/worker/rest/WorkerServer.java
@@ -24,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.pulsar.broker.authentication.AuthenticationService;
import org.apache.pulsar.broker.web.AuthenticationFilter;
import org.apache.pulsar.broker.web.RateLimitingFilter;
+import org.apache.pulsar.broker.web.JettyRequestLogFactory;
import org.apache.pulsar.broker.web.WebExecutorThreadPool;
import org.apache.pulsar.common.util.SecurityUtility;
import org.apache.pulsar.functions.worker.WorkerConfig;
@@ -33,7 +34,6 @@ import org.apache.pulsar.functions.worker.rest.api.v2.WorkerStatsApiV2Resource;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.Slf4jRequestLog;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
@@ -52,7 +52,6 @@ import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
-import java.util.TimeZone;
import javax.servlet.DispatcherType;
@@ -113,11 +112,7 @@ public class WorkerServer {
workerConfig.isAuthenticateMetricsEndpoint(), authenticationService));
RequestLogHandler requestLogHandler = new RequestLogHandler();
- Slf4jRequestLog requestLog = new Slf4jRequestLog();
- requestLog.setExtended(true);
- requestLog.setLogTimeZone(TimeZone.getDefault().getID());
- requestLog.setLogLatency(true);
- requestLogHandler.setRequestLog(requestLog);
+ requestLogHandler.setRequestLog(JettyRequestLogFactory.createRequestLogger());
handlers.add(0, new ContextHandlerCollection());
handlers.add(requestLogHandler);
diff --git a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/WebServer.java b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/WebServer.java
index 62a2063..8a9956c 100644
--- a/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/WebServer.java
+++ b/pulsar-proxy/src/main/java/org/apache/pulsar/proxy/server/WebServer.java
@@ -29,13 +29,13 @@ import java.util.Collections;
import java.util.EnumSet;
import java.util.List;
import java.util.Optional;
-import java.util.TimeZone;
import javax.servlet.DispatcherType;
import org.apache.commons.lang3.tuple.Pair;
import org.apache.pulsar.broker.authentication.AuthenticationService;
import org.apache.pulsar.broker.web.AuthenticationFilter;
import org.apache.pulsar.broker.web.JsonMapperProvider;
import org.apache.pulsar.broker.web.RateLimitingFilter;
+import org.apache.pulsar.broker.web.JettyRequestLogFactory;
import org.apache.pulsar.broker.web.WebExecutorThreadPool;
import org.apache.pulsar.common.util.SecurityUtility;
import org.apache.pulsar.common.util.keystoretls.KeyStoreSSLContext;
@@ -45,7 +45,6 @@ import org.eclipse.jetty.server.HttpConfiguration;
import org.eclipse.jetty.server.HttpConnectionFactory;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.Slf4jRequestLog;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
@@ -195,11 +194,7 @@ public class WebServer {
public void start() throws Exception {
RequestLogHandler requestLogHandler = new RequestLogHandler();
- Slf4jRequestLog requestLog = new Slf4jRequestLog();
- requestLog.setExtended(true);
- requestLog.setLogTimeZone(TimeZone.getDefault().getID());
- requestLog.setLogLatency(true);
- requestLogHandler.setRequestLog(requestLog);
+ requestLogHandler.setRequestLog(JettyRequestLogFactory.createRequestLogger());
handlers.add(0, new ContextHandlerCollection());
handlers.add(requestLogHandler);
diff --git a/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/service/ProxyServer.java b/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/service/ProxyServer.java
index c616db0..3179bb4 100644
--- a/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/service/ProxyServer.java
+++ b/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/service/ProxyServer.java
@@ -25,7 +25,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
-import java.util.TimeZone;
import java.util.stream.Collectors;
import javax.servlet.Servlet;
@@ -34,13 +33,13 @@ import javax.websocket.DeploymentException;
import org.apache.pulsar.broker.PulsarServerException;
import org.apache.pulsar.broker.web.JsonMapperProvider;
+import org.apache.pulsar.broker.web.JettyRequestLogFactory;
import org.apache.pulsar.broker.web.WebExecutorThreadPool;
import org.apache.pulsar.client.api.PulsarClientException;
import org.apache.pulsar.common.util.SecurityUtility;
import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.Slf4jRequestLog;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;
import org.eclipse.jetty.server.handler.DefaultHandler;
import org.eclipse.jetty.server.handler.HandlerCollection;
@@ -126,11 +125,7 @@ public class ProxyServer {
.map(ServerConnector.class::cast).map(ServerConnector::getPort).map(Object::toString)
.collect(Collectors.joining(",")));
RequestLogHandler requestLogHandler = new RequestLogHandler();
- Slf4jRequestLog requestLog = new Slf4jRequestLog();
- requestLog.setExtended(true);
- requestLog.setLogTimeZone(TimeZone.getDefault().getID());
- requestLog.setLogLatency(true);
- requestLogHandler.setRequestLog(requestLog);
+ requestLogHandler.setRequestLog(JettyRequestLogFactory.createRequestLogger());
handlers.add(0, new ContextHandlerCollection());
handlers.add(requestLogHandler);