Author: markt Date: Wed Dec 28 21:21:31 2011 New Revision: 1225343 URL: http://svn.apache.org/viewvc?rev=1225343&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52316 Improve response length logging when sendfile is being used
Modified: tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java tomcat/trunk/webapps/docs/config/valve.xml Modified: tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java?rev=1225343&r1=1225342&r2=1225343&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java (original) +++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Wed Dec 28 21:21:31 2011 @@ -1617,6 +1617,20 @@ public class AccessLogValve extends Valv // Don't need to flush since trigger for log message is after the // response has been committed long length = response.getBytesWritten(false); + if (length <= 0) { + // Protect against nulls and unexpected types as these values + // may be set by untrusted applications + Object start = request.getAttribute( + "org.apache.tomcat.sendfile.start"); + if (start instanceof Long) { + Object end = request.getAttribute( + "org.apache.tomcat.sendfile.end"); + if (end instanceof Long) { + length = ((Long) end).longValue() - + ((Long) start).longValue(); + } + } + } if (length <= 0 && conversion) { buf.append('-'); } else { Modified: tomcat/trunk/webapps/docs/config/valve.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/valve.xml?rev=1225343&r1=1225342&r2=1225343&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/valve.xml (original) +++ tomcat/trunk/webapps/docs/config/valve.xml Wed Dec 28 21:21:31 2011 @@ -80,6 +80,11 @@ <code>AccessLog</code> implementation found to log those requests that are rejected before they are passed to a container.</p> + <p>If sendfile is used, the response bytes will be written asynchronously + in a separate thread and the access log valve will not know how many bytes + were actually written. In this case, the number of bytes that was passed to + the sendfile thread for writing will be recorded in the access log valve. + </p> </subsection> <subsection name="Attributes"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org