This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/10.1.x by this push:
new abf4023059 Refactor access log time stamps to be based on
request.getStartInstant()
abf4023059 is described below
commit abf4023059f96235073a187d33a57a7e71b64271
Author: Mark Thomas <[email protected]>
AuthorDate: Tue Sep 23 08:48:28 2025 +0100
Refactor access log time stamps to be based on request.getStartInstant()
---
.../catalina/valves/AbstractAccessLogValve.java | 108 +++++++++++++--------
.../catalina/valves/ExtendedAccessLogValve.java | 60 ++++++------
.../apache/catalina/valves/JsonAccessLogValve.java | 7 +-
webapps/docs/changelog.xml | 4 +
4 files changed, 108 insertions(+), 71 deletions(-)
diff --git a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
index 4b58d60bd5..24ed32403e 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;
@@ -675,16 +676,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);
@@ -747,9 +745,42 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
/**
* AccessLogElement writes the partial message into the buffer.
+ * <p>
+ * At least one method must be implemented else a loop will occur.
+ * <p>
+ * When the deprecated method is removed in Tomcat 12, the default
implementation for
+ * {@link #addElement(CharArrayWriter, Request, Response, long)} will also
be removed.
*/
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 date The time stamp for the start of the request
+ * @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
+ *
+ * @deprecated Unused. Will be removed in Tomcat 12. Use
+ * {@link #addElement(CharArrayWriter, Request,
Response, long)}
+ */
+ @Deprecated
+ default void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ addElement(buf, request, response, 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
+ */
+ default void addElement(CharArrayWriter buf, Request request, Response
response, long time) {
+ Date date = getDate(request.getCoyoteRequest().getStartTime());
+ addElement(buf, date, request, response, time);
+ }
}
/**
@@ -768,7 +799,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 +833,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 +870,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 = null;
if (remoteAddressType == RemoteAddressType.PEER) {
value = request.getPeerAddr();
@@ -879,7 +910,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 +944,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 +954,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 +973,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,11 +1116,11 @@ 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);
}
/*
* Implementation note: This is deliberately not implemented using
switch. If a switch is used the compiler
@@ -1099,13 +1130,13 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
* pre-loading up to date as the name changes is error prone.
*/
if (type == FormatType.CLF) {
- buf.append(localDateCache.get().getFormat(timestamp));
+
buf.append(localDateCache.get().getFormat(requestStartInstant.toEpochMilli()));
} else if (type == FormatType.SEC) {
- buf.append(Long.toString(timestamp / 1000));
+
buf.append(Long.toString(requestStartInstant.getEpochSecond()));
} else if (type == FormatType.MSEC) {
- buf.append(Long.toString(timestamp));
+ buf.append(Long.toString(requestStartInstant.toEpochMilli()));
} else if (type == FormatType.MSEC_FRAC) {
- frac = timestamp % 1000;
+ frac = requestStartInstant.toEpochMilli() % 1000;
if (frac < 100) {
if (frac < 10) {
buf.append('0');
@@ -1117,6 +1148,7 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
buf.append(Long.toString(frac));
} else {
// FormatType.SDF
+ long timestamp = requestStartInstant.toEpochMilli();
String temp = localDateCache.get().getFormat(format, locale,
timestamp);
if (usesMsecs) {
frac = timestamp % 1000;
@@ -1145,7 +1177,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) {
@@ -1173,7 +1205,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();
@@ -1222,7 +1254,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) {
@@ -1261,7 +1293,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);
@@ -1289,7 +1321,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());
}
@@ -1369,7 +1401,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);
}
}
@@ -1379,7 +1411,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('-');
@@ -1395,7 +1427,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();
@@ -1412,7 +1444,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 {
@@ -1431,7 +1463,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 {
@@ -1445,7 +1477,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);
@@ -1478,7 +1510,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);
}
}
@@ -1494,7 +1526,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);
@@ -1519,7 +1551,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();
@@ -1557,7 +1589,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()) {
@@ -1584,7 +1616,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 (request != null) {
value = request.getAttribute(attribute);
@@ -1614,7 +1646,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);
@@ -1641,7 +1673,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;
@@ -1707,7 +1739,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 aef45048a1..a1f1f9e970 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 = null;
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);
@@ -549,7 +551,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
} else if ("dns".equals(nextToken)) {
return new AccessLogElement() {
@Override
- public void addElement(CharArrayWriter buf, Date date,
Request request, Response response,
+ public void addElement(CharArrayWriter buf, Request
request, Response response,
long time) {
String value;
try {
@@ -588,7 +590,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
} else if ("query".equals(token)) {
return new AccessLogElement() {
@Override
- public void addElement(CharArrayWriter buf, Date
date, Request request, Response response,
+ public void addElement(CharArrayWriter buf,
Request request, Response response,
long time) {
String query = request.getQueryString();
if (query != null) {
@@ -602,7 +604,7 @@ public class ExtendedAccessLogValve extends AccessLogValve {
} else {
return new AccessLogElement() {
@Override
- public void addElement(CharArrayWriter buf, Date date,
Request request, Response response,
+ public void addElement(CharArrayWriter buf, Request
request, Response response,
long time) {
String query = request.getQueryString();
buf.append(request.getRequestURI());
@@ -700,84 +702,84 @@ public class ExtendedAccessLogValve extends
AccessLogValve {
if ("authType".equals(parameter)) {
return new 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) {
wrap(request.getAuthType(), buf);
}
};
} else if ("remoteUser".equals(parameter)) {
return new 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) {
wrap(request.getRemoteUser(), buf);
}
};
} else if ("requestedSessionId".equals(parameter)) {
return new 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) {
wrap(request.getRequestedSessionId(), buf);
}
};
} else if ("requestedSessionIdFromCookie".equals(parameter)) {
return new 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) {
wrap(String.valueOf(request.isRequestedSessionIdFromCookie()), buf);
}
};
} else if ("requestedSessionIdValid".equals(parameter)) {
return new 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) {
wrap(String.valueOf(request.isRequestedSessionIdValid()),
buf);
}
};
} else if ("contentLength".equals(parameter)) {
return new 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) {
wrap(String.valueOf(request.getContentLengthLong()), buf);
}
};
} else if ("connectionId".equals(parameter)) {
return new 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) {
wrap(request.getServletConnection().getConnectionId(),
buf);
}
};
} else if ("characterEncoding".equals(parameter)) {
return new 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) {
wrap(request.getCharacterEncoding(), buf);
}
};
} else if ("locale".equals(parameter)) {
return new 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) {
wrap(request.getLocale(), buf);
}
};
} else if ("protocol".equals(parameter)) {
return new 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) {
wrap(request.getProtocol(), buf);
}
};
} else if ("scheme".equals(parameter)) {
return new 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(request.getScheme());
}
};
} else if ("secure".equals(parameter)) {
return new 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) {
wrap(Boolean.valueOf(request.isSecure()), buf);
}
};
diff --git a/java/org/apache/catalina/valves/JsonAccessLogValve.java
b/java/org/apache/catalina/valves/JsonAccessLogValve.java
index e62a5de135..481bbdeb83 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);
}
}
@@ -257,12 +256,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 c671469e71..6783a047ae 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -118,6 +118,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]