Author: rjung Date: Sun Mar 29 11:19:29 2015 New Revision: 1669896 URL: http://svn.apache.org/r1669896 Log: Add new %{xxx}p with xxx==local or xxx===remote to allow logging remote and/or local port in the access log.
Same xxx values as in Apache httpd, except httpd also allows "canonical". Logging remote ports can be very useful when trying to filter network dumps for problems, that one can detect in the access log but only analyze on the network layer. Backport of r1669882 from trunk. Modified: tomcat/tc8.0.x/trunk/ (props changed) tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/AbstractAccessLogValve.java tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/LocalStrings.properties tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml tomcat/tc8.0.x/trunk/webapps/docs/config/valve.xml Propchange: tomcat/tc8.0.x/trunk/ ------------------------------------------------------------------------------ --- svn:mergeinfo (original) +++ svn:mergeinfo Sun Mar 29 11:19:29 2015 @@ -1 +1 @@ -/tomcat/trunk:1636524,1637156,1637176,1637188,1637331,1637684,1637695,1638720-1638725,1639653,1640010,1640083-1640084,1640088,1640275,1640322,1640347,1640361,1640365,1640403,1640410,1640652,1640655-1640658,1640688,1640700-1640883,1640903,1640976,1640978,1641000,1641026,1641038-1641039,1641051-1641052,1641058,1641064,1641300,1641369,1641374,1641380,1641486,1641634,1641656-1641692,1641704,1641707-1641718,1641720-1641722,1641735,1641981,1642233,1642280,1642554,1642564,1642595,1642606,1642668,1642679,1642697,1642699,1642766,1643002,1643045,1643054-1643055,1643066,1643121,1643128,1643206,1643209-1643210,1643216,1643249,1643270,1643283,1643309-1643310,1643323,1643365-1643366,1643370-1643371,1643465,1643474,1643536,1643570,1643634,1643649,1643651,1643654,1643675,1643731,1643733-1643734,1643761,1643766,1643814,1643937,1643963,1644017,1644169,1644201-1644203,1644321,1644323,1644516,1644523,1644529,1644535,1644730,1644768,1644784-1644785,1644790,1644793,1644815,1644884,1644886,1644890,1644892 ,1644910,1644924,1644929-1644930,1644935,1644989,1645011,1645247,1645355,1645357-1645358,1645455,1645465,1645469,1645471,1645473,1645475,1645486-1645488,1645626,1645641,1645685,1645743,1645763,1645951-1645953,1645955,1645993,1646098-1646106,1646178,1646220,1646302,1646304,1646420,1646470-1646471,1646476,1646559,1646717-1646723,1646773,1647026,1647042,1647530,1647655,1648304,1648815,1648907,1650081,1650365,1651116,1651120,1651280,1651470,1652938,1652970,1653041,1653471,1653550,1653574,1653797,1653815-1653816,1653819,1653840,1653857,1653888,1653972,1654013,1654030,1654050,1654123,1654148,1654159,1654513,1654515,1654517,1654522,1654524,1654725,1654735,1654766,1654785,1654851-1654852,1654978,1655122-1655124,1655126-1655127,1655129-1655130,1655132-1655133,1655312,1655438,1655441,1655454,1655558,1656087,1656299,1656319,1656331,1656345,1656350,1656590,1656648-1656650,1656657,1657041,1657054,1657374,1657492,1657510,1657565,1657580,1657584,1657586,1657589,1657592,1657607,1657609,1657682,1657 907,1658207,1658734,1658781,1658790,1658799,1658802,1658804,1658833,1658840,1658966,1659043,1659053,1659059,1659188-1659189,1659216,1659263,1659293,1659304,1659306-1659307,1659382,1659384,1659428,1659471,1659486,1659505,1659516,1659521,1659524,1659559,1659562,1659803,1659806,1659814,1659833,1659862,1659905,1659919,1659948,1659967,1659983-1659984,1660060,1660074,1660077,1660133,1660168,1660331-1660332,1660353,1660358,1660924,1661386,1661867,1661972,1661990,1662200,1662308-1662309,1662548,1662614,1662736,1662985,1662988-1662989,1663264,1663277,1663298,1663324,1663534,1663562,1663676,1663715,1663754,1663768,1663772,1663781,1663893,1663995,1664143,1664163,1664174,1664301,1664317,1664347,1664657,1664659,1664710,1664863-1664864,1664866,1665085,1665292,1665559,1665653,1665661,1665672,1665694,1665697,1665736,1665779,1665976-1665977,1665980-1665981,1665985-1665986,1665989,1665998,1666004,1666008,1666013,1666017,1666024,1666116,1666386-1666387,1666494,1666496,1666552,1666569,1666579,1666637,1 666649,1666757,1666966,1666972,1666985,1666995,1666997,1667292,1667402,1667406,1667546,1667615,1667630,1667636,1667688,1667764,1667871,1668026,1668135,1668193,1668593,1668596,1668630,1668639,1668843,1669353,1669370,1669451,1669800,1669838,1669876 +/tomcat/trunk:1636524,1637156,1637176,1637188,1637331,1637684,1637695,1638720-1638725,1639653,1640010,1640083-1640084,1640088,1640275,1640322,1640347,1640361,1640365,1640403,1640410,1640652,1640655-1640658,1640688,1640700-1640883,1640903,1640976,1640978,1641000,1641026,1641038-1641039,1641051-1641052,1641058,1641064,1641300,1641369,1641374,1641380,1641486,1641634,1641656-1641692,1641704,1641707-1641718,1641720-1641722,1641735,1641981,1642233,1642280,1642554,1642564,1642595,1642606,1642668,1642679,1642697,1642699,1642766,1643002,1643045,1643054-1643055,1643066,1643121,1643128,1643206,1643209-1643210,1643216,1643249,1643270,1643283,1643309-1643310,1643323,1643365-1643366,1643370-1643371,1643465,1643474,1643536,1643570,1643634,1643649,1643651,1643654,1643675,1643731,1643733-1643734,1643761,1643766,1643814,1643937,1643963,1644017,1644169,1644201-1644203,1644321,1644323,1644516,1644523,1644529,1644535,1644730,1644768,1644784-1644785,1644790,1644793,1644815,1644884,1644886,1644890,1644892 ,1644910,1644924,1644929-1644930,1644935,1644989,1645011,1645247,1645355,1645357-1645358,1645455,1645465,1645469,1645471,1645473,1645475,1645486-1645488,1645626,1645641,1645685,1645743,1645763,1645951-1645953,1645955,1645993,1646098-1646106,1646178,1646220,1646302,1646304,1646420,1646470-1646471,1646476,1646559,1646717-1646723,1646773,1647026,1647042,1647530,1647655,1648304,1648815,1648907,1650081,1650365,1651116,1651120,1651280,1651470,1652938,1652970,1653041,1653471,1653550,1653574,1653797,1653815-1653816,1653819,1653840,1653857,1653888,1653972,1654013,1654030,1654050,1654123,1654148,1654159,1654513,1654515,1654517,1654522,1654524,1654725,1654735,1654766,1654785,1654851-1654852,1654978,1655122-1655124,1655126-1655127,1655129-1655130,1655132-1655133,1655312,1655438,1655441,1655454,1655558,1656087,1656299,1656319,1656331,1656345,1656350,1656590,1656648-1656650,1656657,1657041,1657054,1657374,1657492,1657510,1657565,1657580,1657584,1657586,1657589,1657592,1657607,1657609,1657682,1657 907,1658207,1658734,1658781,1658790,1658799,1658802,1658804,1658833,1658840,1658966,1659043,1659053,1659059,1659188-1659189,1659216,1659263,1659293,1659304,1659306-1659307,1659382,1659384,1659428,1659471,1659486,1659505,1659516,1659521,1659524,1659559,1659562,1659803,1659806,1659814,1659833,1659862,1659905,1659919,1659948,1659967,1659983-1659984,1660060,1660074,1660077,1660133,1660168,1660331-1660332,1660353,1660358,1660924,1661386,1661867,1661972,1661990,1662200,1662308-1662309,1662548,1662614,1662736,1662985,1662988-1662989,1663264,1663277,1663298,1663324,1663534,1663562,1663676,1663715,1663754,1663768,1663772,1663781,1663893,1663995,1664143,1664163,1664174,1664301,1664317,1664347,1664657,1664659,1664710,1664863-1664864,1664866,1665085,1665292,1665559,1665653,1665661,1665672,1665694,1665697,1665736,1665779,1665976-1665977,1665980-1665981,1665985-1665986,1665989,1665998,1666004,1666008,1666013,1666017,1666024,1666116,1666386-1666387,1666494,1666496,1666552,1666569,1666579,1666637,1 666649,1666757,1666966,1666972,1666985,1666995,1666997,1667292,1667402,1667406,1667546,1667615,1667630,1667636,1667688,1667764,1667871,1668026,1668135,1668193,1668593,1668596,1668630,1668639,1668843,1669353,1669370,1669451,1669800,1669838,1669876,1669882 Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/AbstractAccessLogValve.java URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/AbstractAccessLogValve.java?rev=1669896&r1=1669895&r2=1669896&view=diff ============================================================================== --- tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/AbstractAccessLogValve.java (original) +++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/AbstractAccessLogValve.java Sun Mar 29 11:19:29 2015 @@ -142,6 +142,13 @@ public abstract class AbstractAccessLogV CLF, SEC, MSEC, MSEC_FRAC, SDF } + /** + * The list of our port types. + */ + private static enum PortType { + LOCAL, REMOTE + } + //------------------------------------------------------ Constructor public AbstractAccessLogValve() { super(true); @@ -1091,13 +1098,41 @@ public abstract class AbstractAccessLogV } /** - * write local port on which this request was received - %p + * write local or remote port for request connection - %p and %{xxx}p */ - protected class LocalPortElement implements AccessLogElement { + protected class PortElement implements AccessLogElement { + + /** + * Type of port to log + */ + private static final String localPort = "local"; + private static final String remotePort = "remote"; + + private final PortType portType; + + public PortElement() { + portType = PortType.LOCAL; + } + + public PortElement(String type) { + switch (type) { + case remotePort: + portType = PortType.REMOTE; + break; + case localPort: + portType = PortType.LOCAL; + break; + default: + log.error(sm.getString("accessLogValve.invalidPortType", type)); + portType = PortType.LOCAL; + break; + } + } + @Override public void addElement(CharArrayWriter buf, Date date, Request request, Response response, long time) { - if (requestAttributesEnabled) { + if (requestAttributesEnabled && portType == PortType.LOCAL) { Object port = request.getAttribute(SERVER_PORT_ATTRIBUTE); if (port == null) { buf.append(Integer.toString(request.getServerPort())); @@ -1105,7 +1140,11 @@ public abstract class AbstractAccessLogV buf.append(port.toString()); } } else { - buf.append(Integer.toString(request.getServerPort())); + if (portType == PortType.LOCAL) { + buf.append(Integer.toString(request.getServerPort())); + } else { + buf.append(Integer.toString(request.getRemotePort())); + } } } } @@ -1498,6 +1537,8 @@ public abstract class AbstractAccessLogV return new CookieElement(name); case 'o': return new ResponseHeaderElement(name); + case 'p': + return new PortElement(name); case 'r': return new RequestAttributeElement(name); case 's': @@ -1535,7 +1576,7 @@ public abstract class AbstractAccessLogV case 'm': return new MethodElement(); case 'p': - return new LocalPortElement(); + return new PortElement(); case 'q': return new QueryElement(); case 'r': Modified: tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/LocalStrings.properties?rev=1669896&r1=1669895&r2=1669896&view=diff ============================================================================== --- tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/LocalStrings.properties (original) +++ tomcat/tc8.0.x/trunk/java/org/apache/catalina/valves/LocalStrings.properties Sun Mar 29 11:19:29 2015 @@ -26,6 +26,7 @@ accessLogValve.renameFail=Failed to rena accessLogValve.alreadyExists=Failed to rename access log from [{0}] to [{1}], file already exists. accessLogValve.invalidLocale=Failed to set locale to [{0}] accessLogValve.unsupportedEncoding=Failed to set encoding to [{0}], will use the system default character set. +accessLogValve.invalidPortType=Invalid port type [{0}], using server (local) port # Error report valve errorReportValve.errorReport=Error report Modified: tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml?rev=1669896&r1=1669895&r2=1669896&view=diff ============================================================================== --- tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc8.0.x/trunk/webapps/docs/changelog.xml Sun Mar 29 11:19:29 2015 @@ -59,6 +59,10 @@ <bug>57752</bug>: Exclude non-cached resources from the Cache statistics for resource lookups. Patch provided by Adam Mlodzinski. (markt) </fix> + <add> + Allow logging of the remote port in the access log using the format + pattern <code>%{remote}p</code>. (rjung) + </add> </changelog> </subsection> <subsection name="WebSocket"> Modified: tomcat/tc8.0.x/trunk/webapps/docs/config/valve.xml URL: http://svn.apache.org/viewvc/tomcat/tc8.0.x/trunk/webapps/docs/config/valve.xml?rev=1669896&r1=1669895&r2=1669896&view=diff ============================================================================== --- tomcat/tc8.0.x/trunk/webapps/docs/config/valve.xml (original) +++ tomcat/tc8.0.x/trunk/webapps/docs/config/valve.xml Sun Mar 29 11:19:29 2015 @@ -278,7 +278,8 @@ <li><b>%l</b> - Remote logical username from identd (always returns '-')</li> <li><b>%m</b> - Request method (GET, POST, etc.)</li> - <li><b>%p</b> - Local port on which this request was received</li> + <li><b>%p</b> - Local port on which this request was received. + See also <code>%{xxx}p</code> below.</li> <li><b>%q</b> - Query string (prepended with a '?' if it exists)</li> <li><b>%r</b> - First line of the request (method and request URI)</li> <li><b>%s</b> - HTTP status code of the response</li> @@ -299,15 +300,18 @@ timestamp formats. It is modeled after the <a href="http://httpd.apache.org/">Apache HTTP Server</a> log configuration - syntax: + syntax. Each of them can be used multiple times with different <code>xxx</code> keys: </p> <ul> - <li><b><code>%{xxx}i</code></b> for incoming headers</li> - <li><b><code>%{xxx}o</code></b> for outgoing response headers</li> - <li><b><code>%{xxx}c</code></b> for a specific cookie</li> - <li><b><code>%{xxx}r</code></b> xxx is an attribute in the ServletRequest</li> - <li><b><code>%{xxx}s</code></b> xxx is an attribute in the HttpSession</li> - <li><b><code>%{xxx}t</code></b> xxx is an enhanced SimpleDateFormat pattern</li> + <li><b><code>%{xxx}i</code></b> write value of incoming header with name <code>xxx</code></li> + <li><b><code>%{xxx}o</code></b> write value of outgoing header with name <code>xxx</code></li> + <li><b><code>%{xxx}c</code></b> write value of cookie with name <code>xxx</code></li> + <li><b><code>%{xxx}r</code></b> write value of ServletRequest attribute with name <code>xxx</code></li> + <li><b><code>%{xxx}s</code></b> write value of HttpSession attribute with name <code>xxx</code></li> + <li><b><code>%{xxx}p</code></b> write local (server) port (<code>xxx==local</code>) or + 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> </ul> <p>All formats supported by SimpleDateFormat are allowed in <code>%{xxx}t</code>. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org