diff --git a/java/org/apache/catalina/valves/AbstractAccessLogValve.java b/java/org/apache/catalina/valves/AbstractAccessLogValve.java index 5519e0f57fd3..94432c636211 100644 --- a/java/org/apache/catalina/valves/AbstractAccessLogValve.java +++ b/java/org/apache/catalina/valves/AbstractAccessLogValve.java @@ -2040,6 +2040,8 @@ protected AccessLogElement createAccessLogElement(String name, char pattern) { */ protected AccessLogElement createAccessLogElement(char pattern) { switch (pattern) { + case '%': + return new StringElement("%"); case 'a': return new RemoteAddrElement(); case 'A': diff --git a/test/org/apache/catalina/valves/TestAccessLogValve.java b/test/org/apache/catalina/valves/TestAccessLogValve.java index a244bd58505f..f20c2507e037 100644 --- a/test/org/apache/catalina/valves/TestAccessLogValve.java +++ b/test/org/apache/catalina/valves/TestAccessLogValve.java @@ -90,6 +90,7 @@ public class TestAccessLogValve extends TomcatBaseTest { public static Collection parameters() { List parameterSets = new ArrayList<>(); + parameterSets.add(new Object[] {"pct-pct", TEXT_TYPE, "/", "%%", "%"}); parameterSets.add(new Object[] {"pct-a", TEXT_TYPE, "/", "%a", LOCAL_IP_PATTERN}); parameterSets.add(new Object[] {"pct-a", JSON_TYPE, "/", "%a", "\\{\"remoteAddr\":\"" + LOCAL_IP_PATTERN + "\"\\}"}); parameterSets.add(new Object[] {"pct-A", TEXT_TYPE, "/", "%A", IP_PATTERN}); diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index a42ccf104197..97615150edd3 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -178,6 +178,10 @@ Ensure RealmBase finds all matching extension based security constraints. (markt) + + Add %% in AccessLogValve pattern. + Pull request 1004 provided by effhaa. + @@ -18296,4 +18300,3 @@ - diff --git a/webapps/docs/config/valve.xml b/webapps/docs/config/valve.xml index 49515912943e..7eb1edd988af 100644 --- a/webapps/docs/config/valve.xml +++ b/webapps/docs/config/valve.xml @@ -282,12 +282,13 @@ the current request and response. The following pattern codes are supported:

    +
  • %% - Literal '%' character
  • %a - Remote IP address. See also %{xxx}a below.
  • %A - Local IP address
  • %b - Bytes sent, excluding HTTP headers, or '-' if zero
  • %B - Bytes sent, excluding HTTP headers
  • -
  • %D - Time taken to process the request in millis. Note: In +
  • %D - Time taken to process the request, in millis. Note: In httpd %D is microseconds. Behaviour will be aligned to httpd in Tomcat 10 onwards.
  • %F - Time taken to commit the response, in milliseconds