You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by rj...@apache.org on 2011/06/24 07:39:19 UTC

svn commit: r1139158 - /tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java

Author: rjung
Date: Fri Jun 24 05:39:19 2011
New Revision: 1139158

URL: http://svn.apache.org/viewvc?rev=1139158&view=rev
Log:
Correctly support 'S' and 'SSS' in SimpleDateFormat
timestamps for the AccessLogValve.

We prefer "msec_frac" as documented, but the common
other cases should at least work.

Other multiples of the 'S' formatting character
will produce bogus results (but don't make much
sense either).

Modified:
    tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java

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=1139158&r1=1139157&r2=1139158&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java (original)
+++ tomcat/trunk/java/org/apache/catalina/valves/AccessLogValve.java Fri Jun 24 05:39:19 2011
@@ -252,6 +252,9 @@ public class AccessLogValve extends Valv
      * <p>The cache is not threadsafe. It can be used without synchronization
      * via thread local instances, or with synchronization as a global cache.</p>
      *
+     * <p>The cache can be created with a parent cache to build a cache hierarchy.
+     * Access to the parent cache is threadsafe.</p>
+     *
      * <p>This class uses a small thread local first level cache and a bigger
      * synchronized global second level cache.</p>
      */
@@ -1205,10 +1208,12 @@ public class AccessLogValve extends Valv
         private static final String msecFractionFormat = "msec_frac";
 
         /**
-         * The pattern we use to replace "S" millisecond formatting
-         * of SimpleDateFormat by our own handling
+         * The patterns we use to replace "S" and "SSS" millisecond
+         * formatting of SimpleDateFormat by our own handling
          */
-        private static final String msecPattern = "####";
+        private static final String msecPattern = "{#}";
+        private static final String trippleMsecPattern =
+            msecPattern + msecPattern + msecPattern;
 
         /* Our format description string, null if CLF */
         private String format = null;
@@ -1285,6 +1290,7 @@ public class AccessLogValve extends Valv
         public void addElement(StringBuilder buf, Date date, Request request,
                 Response response, long time) {
             long timestamp = date.getTime();
+            long frac;
             if (usesBegin) {
                 timestamp -= time;
             }
@@ -1299,7 +1305,7 @@ public class AccessLogValve extends Valv
                 buf.append(timestamp);
                 break;
             case MSEC_FRAC:
-                long frac = timestamp % 1000;
+                frac = timestamp % 1000;
                 if (frac < 100) {
                     if (frac < 10) {
                         buf.append('0');
@@ -1313,8 +1319,19 @@ public class AccessLogValve extends Valv
             case SDF:
                 String temp = localDateCache.get().getFormat(format, timestamp);
                 if (usesMsecs) {
-                    String msec = Long.toString(timestamp % 1000);
-                    temp = temp.replace(msecPattern, msec);
+                    frac = timestamp % 1000;
+                    StringBuilder trippleMsec = new StringBuilder(4);
+                    if (frac < 100) {
+                        if (frac < 10) {
+                            trippleMsec.append('0');
+                            trippleMsec.append('0');
+                        } else {
+                            trippleMsec.append('0');
+                        }
+                    }
+                    trippleMsec.append(frac);
+                    temp = temp.replace(trippleMsecPattern, trippleMsec);
+                    temp = temp.replace(msecPattern, Long.toString(frac));
                 }
                 buf.append(temp);
                 break;



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org