This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/11.0.x by this push:
new 22b99bac65 Add ConnectionID to AccessLogValve
22b99bac65 is described below
commit 22b99bac657df05b3d228e0bca3a68aed9cb402b
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Feb 24 12:55:08 2025 +0000
Add ConnectionID to AccessLogValve
---
.../catalina/valves/AbstractAccessLogValve.java | 61 ++++++++++++++++++++--
webapps/docs/changelog.xml | 7 +++
webapps/docs/config/valve.xml | 2 +
3 files changed, 65 insertions(+), 5 deletions(-)
diff --git a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
index a0f0163e9a..f6aeeb7e62 100644
--- a/java/org/apache/catalina/valves/AbstractAccessLogValve.java
+++ b/java/org/apache/catalina/valves/AbstractAccessLogValve.java
@@ -115,6 +115,8 @@ import org.apache.tomcat.util.net.IPv6Utils;
* <li><code>%{xxx}s</code> xxx is an attribute in the HttpSession
* <li><code>%{xxx}t</code> xxx is an enhanced SimpleDateFormat pattern (see
Configuration Reference document for
* details on supported time patterns)
+ * <li><code>%{xxx}L</code> xxx is the identifier to log (see Configuration
Reference document for details on supported
+ * identifiers)
* <li><code>%{xxx}T</code> xxx is the unit for the time taken to process the
request (see Configuration Reference
* document for details on supported units)
* </ul>
@@ -167,7 +169,12 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
PEER
}
- // ------------------------------------------------------ Constructor
+ private enum IdentifierType {
+ CONNECTION,
+ UNKNOWN
+ }
+
+
public AbstractAccessLogValve() {
super(true);
}
@@ -1675,6 +1682,48 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
}
}
+
+
+ /**
+ * Write identifier element %{xxx}L
+ */
+ protected class IdentifierElement implements AccessLogElement {
+
+ /**
+ * Type of identifier to log
+ */
+ private final IdentifierType identifierType;
+
+ public IdentifierElement() {
+ this(null);
+ }
+
+
+ public IdentifierElement(String type) {
+ switch (type) {
+ case "c":
+ identifierType = IdentifierType.CONNECTION;
+ break;
+ default:
+
log.error(sm.getString("accessLogValve.invalidIdentifierType", type));
+ identifierType = IdentifierType.UNKNOWN;
+ break;
+ }
+ }
+
+ @Override
+ public void addElement(CharArrayWriter buf, Date date, Request
request, Response response, long time) {
+ switch(identifierType) {
+ case CONNECTION:
+
buf.append(request.getServletConnection().getConnectionId());
+ break;
+ case UNKNOWN:
+ buf.append("???");
+ }
+ }
+ }
+
+
/**
* Parse pattern string and create the array of AccessLogElement.
*
@@ -1747,14 +1796,16 @@ public abstract class AbstractAccessLogValve extends
ValveBase implements Access
*/
protected AccessLogElement createAccessLogElement(String name, char
pattern) {
switch (pattern) {
- case 'i':
- return new HeaderElement(name);
+ case 'a':
+ return new RemoteAddrElement(name);
case 'c':
return new CookieElement(name);
+ case 'i':
+ return new HeaderElement(name);
+ case 'L':
+ return new IdentifierElement(name);
case 'o':
return new ResponseHeaderElement(name);
- case 'a':
- return new RemoteAddrElement(name);
case 'p':
return new PortElement(name);
case 'r':
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 24b96e60b5..044ffad14e 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -133,6 +133,13 @@
Fix a bug in the JRE compatibility detection that incorrectly
identified
Java 19 and Java 20 as supporting Java 21 features. (markt)
</fix>
+ <add>
+ Add support for logging the connection ID (as returned by
+ <code>ServletRequest.getServletConnection().getConnectionId()</code>)
+ with the <code>AccessLogValve</code> and
+ <code>ExtendedAccessLogValve</code>. Based on pull request <pr>814</pr>
+ by Dmole. (markt)
+ </add>
</changelog>
</subsection>
<subsection name="Coyote">
diff --git a/webapps/docs/config/valve.xml b/webapps/docs/config/valve.xml
index da28586791..def558f94e 100644
--- a/webapps/docs/config/valve.xml
+++ b/webapps/docs/config/valve.xml
@@ -337,6 +337,8 @@
remote (client) port (<code>xxx=remote</code>)</li>
<li><b><code>%{xxx}t</code></b> write timestamp at the end of the request
formatted using the
enhanced SimpleDateFormat pattern <code>xxx</code></li>
+ <li><b><code>%{xxx}L</code></b> write an identifier associated with the
request where the only valid value for
+ <code>xxx</code> is <code>c</code> for connection.</li>
<li><b><code>%{xxx}T</code></b> write time taken to process the request
using unit <code>xxx</code>
where valid units are <code>ns</code> for nanoseconds, <code>us</code>
for microseconds,
<code>ms</code> for milliseconds, <code>fracsec</code> for fractional
seconds, or <code>s</code> for whole seconds.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]