keyword | Label | Jetty | Resin | Tomcat | Observations
--- | --- | --- | --- | --- | ---
a | remote IP address | NA | NA | request.getRemoteAddr() [S] | RemoteIPAddressConverter
A | local IP address |  |  | InetAddress.getLocalHost().getHostAddress() [S] | LocalIPAddressConverter
b | Content length | request.getConnection().getGenerator().getContentWritten(); | Unless statusCode==304, response.getContentLength() | response.getContentCount(); | JettyContentLengthConverter, ResinContentLengthConverter
c | Cookie | request cookies (dumps all of them} | dumps cookies by name, request cookie first, if unavailable then response cookie | request cookies, by name | RequestCookieConverter
h | remote IP addr | request.getRemoteAddr() [S] | request.printRemoteAddr, IP address string in textual presentation | request.getRemoteHost() [S] | RemoteHostConverter
H | request protocol |  |  | request.getProtocol() | RequestProtocolConverter
i | Incoming header | NA | request.getHeader(name) [S] | request.getHeader(header) [S] | RequestHeaderConverter
l | Remote logical username from identd | always '-' | always '-' | always '-' | NAConverter
n | attribute in the ServletRequest | NA | request.getAttribute(name) [S] | NA | RequestAttributeConverter, in tomcat %r is used
o | response header |  | response.getHeader(name) [NS] |  | not implemented although response.setHeader() method is available
r | First line of the request (method and request URI) | request.getMethod()+ request.getUri() [NS] +request.getProtocol() | request.getMethod() + request.getUriBuffer() [NS] + request.getProtocol() | request.getMethod() + request.getRequestURI() + request.getQueryString() + '?' + request.getProtocol(); | RequestURLConverter
{}r | attribute in the ServletRequest | NA | NA | request.getAttribute(name) [S] | RequestAttributeConverter, in resin %n is used
s | status code | response.getStatus() [NS] | response.getStatusCode() [NS] | response.getStatus() [NS] | surprisingly, not in the Servlet API
{}t | request time stamp | getTimeStamp() [NS] | based on current time | based on current time | DateConverter
T | request processing duration in seconds | NA | request.getStartTime() - Alarm.getExactTime() | Valve measures invocation time |
D | request processing duration in millis |  | request.getStartTime() - Alarm.getExactTime() | Valve measures invocation time |
u | remote user | request.getRemoteUser() [S] | request.getRemoteUser() [S] | request.getRemoteUser() [S] | RemoteUserConverter
U | Requested URI path | NA | request.getRequestURI() [S} | request.getRequestURI() [S} | RequestURIConverter

Tomcat ====== %a - Remote IP address %A - Local IP address %b - Bytes sent, excluding HTTP headers, or '-' if zero %B - Bytes sent, excluding HTTP headers %h - Remote host name (or IP address if resolveHosts is false) %H - Request protocol %l - Remote logical username from identd (always returns '-') %m - Request method (GET, POST, etc.) %p - Local port on which this request was received %q - Query string (prepended with a '?' if it exists) %r - First line of the request (method and request URI) %s - HTTP status code of the response %S - User session ID %t - Date and time, in Common Log Format %u - Remote user that was authenticated (if any), else '-' %U - Requested URL path %v - Local server name %D - Time taken to process the request, in millis %T - Time taken to process the request, in seconds Resin =====