This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/main by this push:
new 65475524cf Refactor access log time stamps to be based on
request.getStartInstant()
65475524cf is described below
commit 65475524cf11d26412a2d30f376a578f5fb119ce
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Sep 22 22:15:37 2025 +0100
Refactor access log time stamps to be based on request.getStartInstant()
This lays the foundation for addressing BZ 69817
https://bz.apache.org/bugzilla/show_bug.cgi?id=69817
There may also be scope for optimising time stamp generation
---
.../catalina/valves/AbstractAccessLogValve.java | 104 +++++++++------------
.../catalina/valves/ExtendedAccessLogValve.java | 60 ++++++------
.../apache/catalina/valves/JsonAccessLogValve.java | 7 +-
webapps/docs/changelog.xml | 4 +
4 files changed, 83 insertions(+), 92 deletions(-)
diff --git a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
index 10c3d013c2..01d2b93ac8 100644
--- a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
+++ b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
@@ -21,6 +21,7 @@ import java.io.CharArrayWriter;
import java.io.IOException;
import java.net.InetAddress;
import java.text.SimpleDateFormat;
+import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.Enumeration;
@@ -422,11 +423,6 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
ThreadLocal.withInitial(() -> new DateFormatCache(localCacheSize,
Locale.getDefault(), globalDateCache));
- /**
- * The system time when we last updated the Date that this valve uses for
log lines.
- */
- private static final ThreadLocal<Date> localDate =
ThreadLocal.withInitial(Date::new);
-
/**
* Are we doing conditional logging ? default null. It is the value of
<code>conditionUnless</code> property.
*/
@@ -675,16 +671,13 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
return;
}
- // Date for access log should be the beginning of the request
- Date date = getDate(request.getCoyoteRequest().getStartTime());
-
CharArrayWriter result = charArrayWriters.pop();
if (result == null) {
result = new CharArrayWriter(128);
}
for (AccessLogElement logElement : logElements) {
- logElement.addElement(result, date, request, response, time);
+ logElement.addElement(result, request, response, time);
}
log(result);
@@ -706,22 +699,6 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
// -------------------------------------------------------- Private Methods
- /**
- * This method returns a Date object that is accurate to within one
second. If a thread calls this method to get a
- * Date, and it's been less than 1 second since a new Date was created,
this method simply gives out the same Date
- * again so that the system doesn't spend time creating Date objects
unnecessarily.
- *
- * @param systime The time
- *
- * @return the date object
- */
- private static Date getDate(long systime) {
- Date date = localDate.get();
- date.setTime(systime);
- return date;
- }
-
-
/**
* Find a locale by name.
*
@@ -749,7 +726,15 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
* AccessLogElement writes the partial message into the buffer.
*/
protected interface AccessLogElement {
- void addElement(CharArrayWriter buf, Date date, Request request,
Response response, long time);
+ /**
+ * Called to create an access log entry.
+ *
+ * @param buf The buffer to which the log element should be added
+ * @param request The request that triggered this access log entry
+ * @param response The response to the request that triggered this
access log entry
+ * @param time The time taken in nanoseconds to process the request
+ */
+ void addElement(CharArrayWriter buf, Request request, Response
response, long time);
}
/**
@@ -768,7 +753,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class ThreadNameElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
RequestInfo info =
request.getCoyoteRequest().getRequestProcessor();
if (info != null) {
buf.append(info.getWorkerThreadName());
@@ -802,7 +787,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
buf.append(localAddrValue);
}
}
@@ -839,7 +824,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
String value;
if (remoteAddressType == RemoteAddressType.PEER) {
value = request.getPeerAddr();
@@ -879,7 +864,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected class HostElement implements AccessLogElement, CachedElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
String value = null;
if (requestAttributesEnabled) {
Object host = request.getAttribute(REMOTE_HOST_ATTRIBUTE);
@@ -913,7 +898,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class LogicalUserNameElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
buf.append('-');
}
}
@@ -923,7 +908,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected class ProtocolElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (requestAttributesEnabled) {
Object proto = request.getAttribute(PROTOCOL_ATTRIBUTE);
if (proto == null) {
@@ -942,7 +927,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class UserElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (request != null) {
String value = request.getRemoteUser();
if (value != null) {
@@ -1085,24 +1070,24 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
- long timestamp = date.getTime();
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
+ Instant requestStartInstant =
Instant.from(request.getCoyoteRequest().getStartInstant());
long frac;
if (!usesBegin) {
- timestamp += TimeUnit.NANOSECONDS.toMillis(time);
+ requestStartInstant.plusNanos(time);
}
switch (type) {
case CLF:
- buf.append(localDateCache.get().getFormat(timestamp));
+
buf.append(localDateCache.get().getFormat(requestStartInstant.toEpochMilli()));
break;
case SEC:
- buf.append(Long.toString(timestamp / 1000));
+
buf.append(Long.toString(requestStartInstant.getEpochSecond()));
break;
case MSEC:
- buf.append(Long.toString(timestamp));
+
buf.append(Long.toString(requestStartInstant.toEpochMilli()));
break;
case MSEC_FRAC:
- frac = timestamp % 1000;
+ frac = requestStartInstant.toEpochMilli() % 1000;
if (frac < 100) {
buf.append('0');
if (frac < 10) {
@@ -1112,6 +1097,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
buf.append(Long.toString(frac));
break;
case SDF:
+ long timestamp = requestStartInstant.toEpochMilli();
String temp = localDateCache.get().getFormat(format,
locale, timestamp);
if (usesMsecs) {
frac = timestamp % 1000;
@@ -1141,7 +1127,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class RequestElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (request != null) {
String method = request.getMethod();
if (method == null) {
@@ -1169,7 +1155,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class HttpStatusCodeElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (response != null) {
// This approach is used to reduce GC from toString conversion
int status = response.getStatus();
@@ -1218,7 +1204,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (requestAttributesEnabled && portType == PortType.LOCAL) {
Object port = request.getAttribute(SERVER_PORT_ATTRIBUTE);
if (port == null) {
@@ -1257,7 +1243,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
// Don't need to flush since trigger for log message is after the
// response has been committed
long length = response.getBytesWritten(false);
@@ -1285,7 +1271,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class MethodElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (request != null) {
buf.append(request.getMethod());
}
@@ -1365,7 +1351,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
style.append(buf, time);
}
}
@@ -1375,7 +1361,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class FirstByteTimeElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
long commitTime =
response.getCoyoteResponse().getCommitTimeNanos();
if (commitTime == -1) {
buf.append('-');
@@ -1391,7 +1377,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class QueryElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
String query = null;
if (request != null) {
query = request.getQueryString();
@@ -1408,7 +1394,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class SessionIdElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (request == null) {
buf.append('-');
} else {
@@ -1427,7 +1413,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class RequestURIElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (request != null) {
buf.append(request.getRequestURI());
} else {
@@ -1441,7 +1427,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected class LocalServerNameElement implements AccessLogElement {
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
String value = null;
if (requestAttributesEnabled) {
Object serverName =
request.getAttribute(SERVER_NAME_ATTRIBUTE);
@@ -1474,7 +1460,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
buf.append(str);
}
}
@@ -1490,7 +1476,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
Enumeration<String> iter = request.getHeaders(header);
if (iter.hasMoreElements()) {
escapeAndAppend(iter.nextElement(), buf);
@@ -1515,7 +1501,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
StringBuilder value = null;
boolean first = true;
Cookie[] cookies = request.getCookies();
@@ -1553,7 +1539,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (null != response) {
Iterator<String> iter = response.getHeaders(header).iterator();
if (iter.hasNext()) {
@@ -1580,7 +1566,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
Object value;
if (request != null) {
value = request.getAttribute(attribute);
@@ -1610,7 +1596,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
Object value = null;
if (null != request) {
HttpSession sess = request.getSession(false);
@@ -1637,7 +1623,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected static class ConnectionStatusElement implements AccessLogElement
{
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (response != null && request != null) {
boolean statusFound = false;
@@ -1700,7 +1686,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
switch (identifierType) {
case CONNECTION:
buf.append(request.getServletConnection().getConnectionId());
diff --git a/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
b/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
index 3516ddd1ad..977c921f05 100644
--- a/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
+++ b/java/org/apache/catalina/valves/ExtendedAccessLogValve.java
@@ -145,11 +145,12 @@ public class ExtendedAccessLogValve extends
AccessLogValve {
ThreadLocal.withInitial(() -> new
ElementTimestampStruct("yyyy-MM-dd"));
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
ElementTimestampStruct eds = currentDate.get();
long millis = eds.currentTimestamp.getTime();
- if (date.getTime() > (millis + INTERVAL - 1) || date.getTime() <
millis) {
- eds.currentTimestamp.setTime(date.getTime() - (date.getTime()
% INTERVAL));
+ long epochMilli =
request.getCoyoteRequest().getStartInstant().toEpochMilli();
+ if (epochMilli > (millis + INTERVAL - 1) || epochMilli < millis) {
+ eds.currentTimestamp.setTime(epochMilli - (epochMilli %
INTERVAL));
eds.currentTimestampString =
eds.currentTimestampFormat.format(eds.currentTimestamp);
}
buf.append(eds.currentTimestampString);
@@ -164,11 +165,12 @@ public class ExtendedAccessLogValve extends
AccessLogValve {
ThreadLocal.withInitial(() -> new
ElementTimestampStruct("HH:mm:ss"));
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
ElementTimestampStruct eds = currentTime.get();
long millis = eds.currentTimestamp.getTime();
- if (date.getTime() > (millis + INTERVAL - 1) || date.getTime() <
millis) {
- eds.currentTimestamp.setTime(date.getTime() - (date.getTime()
% INTERVAL));
+ long epochMilli =
request.getCoyoteRequest().getStartInstant().toEpochMilli();
+ if (epochMilli > (millis + INTERVAL - 1) || epochMilli < millis) {
+ eds.currentTimestamp.setTime(epochMilli - (epochMilli %
INTERVAL));
eds.currentTimestampString =
eds.currentTimestampFormat.format(eds.currentTimestamp);
}
buf.append(eds.currentTimestampString);
@@ -183,7 +185,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
wrap(request.getHeader(header), buf);
}
}
@@ -196,7 +198,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
wrap(response.getHeader(header), buf);
}
}
@@ -209,7 +211,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
wrap(request.getContext().getServletContext().getAttribute(attribute), buf);
}
}
@@ -222,7 +224,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
StringBuilder value = new StringBuilder();
boolean first = true;
Cookie[] c = request.getCookies();
@@ -255,7 +257,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
if (null != response) {
Iterator<String> iter = response.getHeaders(header).iterator();
if (iter.hasNext()) {
@@ -287,7 +289,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
wrap(request.getAttribute(attribute), buf);
}
}
@@ -300,7 +302,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
HttpSession session;
if (request != null) {
session = request.getSession(false);
@@ -329,7 +331,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
String parameterValue;
try {
parameterValue = request.getParameter(parameter);
@@ -550,7 +552,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
if ("ip".equals(nextToken)) {
return new LocalAddrElement(getIpv6Canonical());
} else if ("dns".equals(nextToken)) {
- return (buf, date, req, res, l) -> {
+ return (buf, req, res, l) -> {
String value;
try {
value = InetAddress.getLocalHost().getHostName();
@@ -592,7 +594,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
if ("stem".equals(token)) {
return new RequestURIElement();
} else if ("query".equals(token)) {
- return (buf, date, request, res, l) -> {
+ return (buf, request, res, l) -> {
String query = request.getQueryString();
if (query != null) {
buf.append(query);
@@ -602,7 +604,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
};
}
} else {
- return (buf, date, request, res, l) -> {
+ return (buf, request, res, l) -> {
String query = request.getQueryString();
buf.append(request.getRequestURI());
if (query != null) {
@@ -707,41 +709,41 @@ public class ExtendedAccessLogValve extends
AccessLogValve {
protected AccessLogElement getServletRequestElement(String parameter) {
switch (parameter) {
case "authType" -> {
- return (buf, date, request, res, l) ->
wrap(request.getAuthType(), buf);
+ return (buf, request, res, l) -> wrap(request.getAuthType(),
buf);
}
case "remoteUser" -> {
- return (buf, date, request, res, l) ->
wrap(request.getRemoteUser(), buf);
+ return (buf, request, res, l) -> wrap(request.getRemoteUser(),
buf);
}
case "requestedSessionId" -> {
- return (buf, date, request, res, l) ->
wrap(request.getRequestedSessionId(), buf);
+ return (buf, request, res, l) ->
wrap(request.getRequestedSessionId(), buf);
}
case "requestedSessionIdFromCookie" -> {
- return (buf, date, request, res, l) ->
wrap(String.valueOf(request.isRequestedSessionIdFromCookie()),
+ return (buf, request, res, l) ->
wrap(String.valueOf(request.isRequestedSessionIdFromCookie()),
buf);
}
case "requestedSessionIdValid" -> {
- return (buf, date, request, res, l) ->
wrap(String.valueOf(request.isRequestedSessionIdValid()), buf);
+ return (buf, request, res, l) ->
wrap(String.valueOf(request.isRequestedSessionIdValid()), buf);
}
case "contentLength" -> {
- return (buf, date, request, res, l) ->
wrap(String.valueOf(request.getContentLengthLong()), buf);
+ return (buf, request, res, l) ->
wrap(String.valueOf(request.getContentLengthLong()), buf);
}
case "connectionId" -> {
- return (buf, date, request, res, l) ->
wrap(request.getServletConnection().getConnectionId(), buf);
+ return (buf, request, res, l) ->
wrap(request.getServletConnection().getConnectionId(), buf);
}
case "characterEncoding" -> {
- return (buf, date, request, res, l) ->
wrap(request.getCharacterEncoding(), buf);
+ return (buf, request, res, l) ->
wrap(request.getCharacterEncoding(), buf);
}
case "locale" -> {
- return (buf, date, request, res, l) ->
wrap(request.getLocale(), buf);
+ return (buf, request, res, l) -> wrap(request.getLocale(),
buf);
}
case "protocol" -> {
- return (buf, date, request, res, l) ->
wrap(request.getProtocol(), buf);
+ return (buf, request, res, l) -> wrap(request.getProtocol(),
buf);
}
case "scheme" -> {
- return (buf, date, request, res, l) ->
buf.append(request.getScheme());
+ return (buf, request, res, l) ->
buf.append(request.getScheme());
}
case "secure" -> {
- return (buf, date, request, res, l) ->
wrap(Boolean.valueOf(request.isSecure()), buf);
+ return (buf, request, res, l) ->
wrap(Boolean.valueOf(request.isSecure()), buf);
}
case null, default -> {
log.error(sm.getString("extendedAccessLogValve.badXParamValue", parameter));
diff --git a/java/org/apache/catalina/valves/JsonAccessLogValve.java
b/java/org/apache/catalina/valves/JsonAccessLogValve.java
index 7c54506a73..9932d81a60 100644
--- a/java/org/apache/catalina/valves/JsonAccessLogValve.java
+++ b/java/org/apache/catalina/valves/JsonAccessLogValve.java
@@ -20,7 +20,6 @@ import java.io.CharArrayWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
@@ -125,7 +124,7 @@ public class JsonAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
buf.write(ch);
}
}
@@ -256,12 +255,12 @@ public class JsonAccessLogValve extends AccessLogValve {
}
@Override
- public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ public void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
buf.append('"').append(attributeName).append('"').append(':');
if (quoteValue) {
buf.append('"');
}
- delegate.addElement(buf, date, request, response, time);
+ delegate.addElement(buf, request, response, time);
if (quoteValue) {
buf.append('"');
}
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index d075806c63..51d4fd6817 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -189,6 +189,10 @@
<fix>
Further performance improvements for ParameterMap. (jengebr/markt)
</fix>
+ <scode>
+ Refactor access log time stamps to be based on the <code>Instant</code>
+ request processing starts. (markt)
+ </scode>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]