You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by kk...@apache.org on 2011/12/25 23:51:56 UTC

svn commit: r1224654 - in /tomcat/tc7.0.x/trunk: ./ java/org/apache/juli/logging/ java/org/apache/tomcat/util/http/ webapps/docs/ webapps/docs/config/

Author: kkolinko
Date: Sun Dec 25 22:51:56 2011
New Revision: 1224654

URL: http://svn.apache.org/viewvc?rev=1224654&view=rev
Log:
Merged revisions r1224648 r1224650 r1224652 from tomcat/trunk:
Improve fix for https://issues.apache.org/bugzilla/show_bug.cgi?id=52184
- UserDataHelper:
1) Fix bug in suppressionTime processing. The config value is in seconds, but time arithmetic needs msecs. Now multiplying the configured value by 1000L.
2) Change the API to allow to distinguish the case when next message will be printed at DEBUG level.
3) The private method logAtInfo() now always updates the time. Thus I removed its argument.
- Cookies:
1) Add i18n and print special message when we fall from INFO to DEBUG logging.

Modified:
    tomcat/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/juli/logging/UserDataHelper.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Cookies.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/LocalStrings.properties
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
    tomcat/tc7.0.x/trunk/webapps/docs/config/systemprops.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Dec 25 22:51:56 2011
@@ -1 +1 @@
-/tomcat/trunk:1156115,1156171,1156276,1156304,1156519,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1158426,1160347,1160592,1160611,1160619,1160626,1160639,1160652,1160720-1160721,1160772,1160774,1160776,1161303,1161310,1161322,1161339,1161486,1161540,1161549,1161584,1162082,1162149,1162169,1162721,1162769,1162836,1162932,1163630,1164419,1164438,1164469,1164480,1164567,1165234,1165247-1165248,1165253,1165273,1165282,1165309,1165331,1165338,1165347,1165360-1165361,1165367-1165368,1165602,1165608,1165677,1165693,1165721,1165723,1165728,1165730,1165738,1165746,1165765,1165777,1165918,1165921,1166077,1166150-1166151,1166290,1166366,1166620,1166686,1166693,1166752,1166757,1167368,1167394,1169447,1170647,1171692,1172233-1172234,1172236,1172269,1172278,1172282,1172556,1172610,1172664,1172689,1172711,1173020-1173021,1173082,1173088,1173090,1173096
 ,1173241,1173256,1173288,1173333,1173342,1173461,1173614,1173630,1173659,1173722,1174061,1174239,1174322,1174325,1174329-1174330,1174337-1174339,1174343,1174353,1174799,1174882,1174884,1174983,1175155,1175158,1175167,1175182,1175190,1175201,1175272,1175275,1175283,1175582,1175589-1175590,1175594,1175602,1175613,1175633,1175690,1175713,1175798,1175889,1175896,1175907,1176584,1176590,1176799,1177050,1177060,1177125,1177152,1177160,1177245,1177850,1177862,1177978,1178209,1178228,1178233,1178449,1178542,1178681,1178684,1178721,1179268,1179274,1180261,1180865,1180891,1180894,1180907,1181028,1181123,1181125,1181136,1181291,1181743,1182796,1183078,1183105,1183142,1183328,1183339-1183340,1183492-1183494,1183605,1184917,1184919,1185018,1185020,1185200,1185588,1185626,1185756,1185758,1186011,1186042-1186045,1186104,1186123,1186137,1186153,1186254,1186257,1186377-1186379,1186479-1186480,1186712,1186743,1186750,1186763,1186890-1186892,1186894,1186949,1187018,1187027-1187028,1187381,1187
 753,1187755,1187775,1187801,1187806,1187809,1187827,1188301,1188303-1188305,1188399,1188822,1188930-1188931,1189116,1189129,1189183,1189240,1189256,1189386,1189413-1189414,1189477,1189685,1189805,1189857,1189864,1189882,1190034,1190185,1190279,1190339,1190371,1190388-1190389,1190474,1190481,1194915,1195222-1195223,1195531,1195899,1195905,1195943,1195949,1195953,1195955,1195965,1195968,1196175,1196212,1196223,1196304-1196305,1196735,1196825,1196827,1197158,1197261,1197263,1197299-1197300,1197305,1197339-1197340,1197343,1197382,1197386-1197387,1197480,1197578,1198497,1198528,1198552,1198602,1198604,1198607,1198622,1198640,1198696,1198707,1199418,1199432,1199436,1199513,1199529,1199980,1199996,1200056,1200089,1200106-1200107,1200263,1200316,1200320,1200398-1200399,1200445-1200446,1200555,1200627,1200696,1200725,1200937,1200941,1201069,1201087,1201180,1201235-1201237,1201508,1201521,1201542,1201545-1201546,1201548,1201555-1201556,1201568,1201576,1201608,1201921-1201922,1201931,1
 202035,1202039,1202271,1202565,1202578,1202705,1202828,1202860,1203047-1203052,1203078,1203091,1203253,1203278,1204182,1204856,1204867,1204936,1204938,1204982,1205033,1205065,1205082,1205097,1205112,1206200,1207692,1208046,1208073,1208096,1208114,1208145,1208772,1209194,1209277-1209278,1209686-1209731,1210894,1212091,1212095,1212099,1212118,1213469,1213906,1214853,1214855,1214864,1215115,1215118-1215119,1215121,1220293,1220295,1221038,1221842,1222189,1222201,1222276,1222300,1222690,1222850,1222852,1222855,1224607,1224617
+/tomcat/trunk:1156115,1156171,1156276,1156304,1156519,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1158426,1160347,1160592,1160611,1160619,1160626,1160639,1160652,1160720-1160721,1160772,1160774,1160776,1161303,1161310,1161322,1161339,1161486,1161540,1161549,1161584,1162082,1162149,1162169,1162721,1162769,1162836,1162932,1163630,1164419,1164438,1164469,1164480,1164567,1165234,1165247-1165248,1165253,1165273,1165282,1165309,1165331,1165338,1165347,1165360-1165361,1165367-1165368,1165602,1165608,1165677,1165693,1165721,1165723,1165728,1165730,1165738,1165746,1165765,1165777,1165918,1165921,1166077,1166150-1166151,1166290,1166366,1166620,1166686,1166693,1166752,1166757,1167368,1167394,1169447,1170647,1171692,1172233-1172234,1172236,1172269,1172278,1172282,1172556,1172610,1172664,1172689,1172711,1173020-1173021,1173082,1173088,1173090,1173096
 ,1173241,1173256,1173288,1173333,1173342,1173461,1173614,1173630,1173659,1173722,1174061,1174239,1174322,1174325,1174329-1174330,1174337-1174339,1174343,1174353,1174799,1174882,1174884,1174983,1175155,1175158,1175167,1175182,1175190,1175201,1175272,1175275,1175283,1175582,1175589-1175590,1175594,1175602,1175613,1175633,1175690,1175713,1175798,1175889,1175896,1175907,1176584,1176590,1176799,1177050,1177060,1177125,1177152,1177160,1177245,1177850,1177862,1177978,1178209,1178228,1178233,1178449,1178542,1178681,1178684,1178721,1179268,1179274,1180261,1180865,1180891,1180894,1180907,1181028,1181123,1181125,1181136,1181291,1181743,1182796,1183078,1183105,1183142,1183328,1183339-1183340,1183492-1183494,1183605,1184917,1184919,1185018,1185020,1185200,1185588,1185626,1185756,1185758,1186011,1186042-1186045,1186104,1186123,1186137,1186153,1186254,1186257,1186377-1186379,1186479-1186480,1186712,1186743,1186750,1186763,1186890-1186892,1186894,1186949,1187018,1187027-1187028,1187381,1187
 753,1187755,1187775,1187801,1187806,1187809,1187827,1188301,1188303-1188305,1188399,1188822,1188930-1188931,1189116,1189129,1189183,1189240,1189256,1189386,1189413-1189414,1189477,1189685,1189805,1189857,1189864,1189882,1190034,1190185,1190279,1190339,1190371,1190388-1190389,1190474,1190481,1194915,1195222-1195223,1195531,1195899,1195905,1195943,1195949,1195953,1195955,1195965,1195968,1196175,1196212,1196223,1196304-1196305,1196735,1196825,1196827,1197158,1197261,1197263,1197299-1197300,1197305,1197339-1197340,1197343,1197382,1197386-1197387,1197480,1197578,1198497,1198528,1198552,1198602,1198604,1198607,1198622,1198640,1198696,1198707,1199418,1199432,1199436,1199513,1199529,1199980,1199996,1200056,1200089,1200106-1200107,1200263,1200316,1200320,1200398-1200399,1200445-1200446,1200555,1200627,1200696,1200725,1200937,1200941,1201069,1201087,1201180,1201235-1201237,1201508,1201521,1201542,1201545-1201546,1201548,1201555-1201556,1201568,1201576,1201608,1201921-1201922,1201931,1
 202035,1202039,1202271,1202565,1202578,1202705,1202828,1202860,1203047-1203052,1203078,1203091,1203253,1203278,1204182,1204856,1204867,1204936,1204938,1204982,1205033,1205065,1205082,1205097,1205112,1206200,1207692,1208046,1208073,1208096,1208114,1208145,1208772,1209194,1209277-1209278,1209686-1209731,1210894,1212091,1212095,1212099,1212118,1213469,1213906,1214853,1214855,1214864,1215115,1215118-1215119,1215121,1220293,1220295,1221038,1221842,1222189,1222201,1222276,1222300,1222690,1222850,1222852,1222855,1224607,1224617,1224648-1224652

Modified: tomcat/tc7.0.x/trunk/java/org/apache/juli/logging/UserDataHelper.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/juli/logging/UserDataHelper.java?rev=1224654&r1=1224653&r2=1224654&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/juli/logging/UserDataHelper.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/juli/logging/UserDataHelper.java Sun Dec 25 22:51:56 2011
@@ -42,6 +42,7 @@ public class UserDataHelper {
 
     // A value of 0 is equivalent to using INFO_ALL
     // A negative value will trigger infinite suppression
+    // The value is milliseconds
     private long suppressionTime;
 
     private volatile long lastInfoTime = 0;
@@ -64,9 +65,9 @@ public class UserDataHelper {
         }
 
         // Default suppression time of 1 day.
-        suppressionTime = Long.getLong(
+        suppressionTime = Integer.getInteger(
                 "org.apache.juli.logging.UserDataHelper.SUPPRESSION_TIME",
-                60 * 60 * 24).longValue();
+                60 * 60 * 24).intValue() * 1000L;
 
         if (suppressionTime == 0) {
             config = Config.INFO_ALL;
@@ -74,55 +75,61 @@ public class UserDataHelper {
     }
 
 
-    public boolean isEnabled() {
+    /**
+     * Returns log mode for the next log message, or <code>null</code> if the
+     * message should not be logged.
+     *
+     * <p>
+     * If <code>INFO_THEN_DEBUG</code> configuration option is enabled, this
+     * method might change internal state of this object.
+     *
+     * @return Log mode, or <code>null</code>
+     */
+    public Mode getNextMode() {
         if (Config.NONE == config) {
-            return false;
+            return null;
         } else if (Config.DEBUG_ALL == config) {
-            return log.isDebugEnabled();
+            return log.isDebugEnabled() ? Mode.DEBUG : null;
         } else if (Config.INFO_THEN_DEBUG == config) {
-            if (logAtInfo(false)) {
-                return log.isInfoEnabled();
+            if (logAtInfo()) {
+                return log.isInfoEnabled() ? Mode.INFO_THEN_DEBUG : null;
             } else {
-                return log.isDebugEnabled();
+                return log.isDebugEnabled() ? Mode.DEBUG : null;
             }
         } else if (Config.INFO_ALL == config) {
-            return log.isInfoEnabled();
+            return log.isInfoEnabled() ? Mode.INFO : null;
         }
         // Should never happen
-        return false;
+        return null;
     }
 
 
-    public void log(String message) {
-        if (Config.NONE == config) {
-            // NOOP;
-        } else if (Config.DEBUG_ALL == config) {
-            log.debug(message);
-        } else if (Config.INFO_THEN_DEBUG == config) {
-            if (logAtInfo(true)) {
+    public void log(Mode mode, String message) {
+        if (mode != null) {
+            switch (mode) {
+            case INFO:
+            case INFO_THEN_DEBUG:
                 log.info(message);
-            } else {
+                break;
+            case DEBUG:
                 log.debug(message);
+                break;
             }
-        } else if (Config.INFO_ALL == config) {
-            log.info(message);
         }
     }
 
 
-    public void log(String message, Throwable t) {
-        if (Config.NONE == config) {
-            // NOOP;
-        } else if (Config.DEBUG_ALL == config) {
-            log.debug(message, t);
-        } else if (Config.INFO_THEN_DEBUG == config) {
-            if (logAtInfo(true)) {
+    public void log(Mode mode, String message, Throwable t) {
+        if (mode != null) {
+            switch (mode) {
+            case INFO:
+            case INFO_THEN_DEBUG:
                 log.info(message, t);
-            } else {
+                break;
+            case DEBUG:
                 log.debug(message, t);
+                break;
             }
-        } else if (Config.INFO_ALL == config) {
-            log.info(message, t);
         }
     }
 
@@ -132,7 +139,7 @@ public class UserDataHelper {
      * see a simple enough way to make it completely thread-safe that was not
      * likely to compromise performance.
      */
-    private boolean logAtInfo(boolean updateLastLoggedTime) {
+    private boolean logAtInfo() {
 
         if (suppressionTime < 0 && lastInfoTime > 0) {
             return false;
@@ -144,9 +151,7 @@ public class UserDataHelper {
             return false;
         }
 
-        if (updateLastLoggedTime) {
-            lastInfoTime = now;
-        }
+        lastInfoTime = now;
         return true;
     }
 
@@ -157,4 +162,21 @@ public class UserDataHelper {
         INFO_THEN_DEBUG,
         INFO_ALL
     }
+
+    /**
+     * Log mode for the next log message.
+     */
+    public static enum Mode {
+        DEBUG(false), INFO_THEN_DEBUG(true), INFO(false);
+
+        private final boolean fallToDebug;
+
+        Mode(boolean fallToDebug) {
+            this.fallToDebug = fallToDebug;
+        }
+
+        public boolean fallToDebug() {
+            return fallToDebug;
+        }
+    }
 }

Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Cookies.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Cookies.java?rev=1224654&r1=1224653&r2=1224654&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Cookies.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/Cookies.java Sun Dec 25 22:51:56 2011
@@ -24,6 +24,7 @@ import org.apache.juli.logging.LogFactor
 import org.apache.juli.logging.UserDataHelper;
 import org.apache.tomcat.util.buf.ByteChunk;
 import org.apache.tomcat.util.buf.MessageBytes;
+import org.apache.tomcat.util.res.StringManager;
 
 /**
  * A collection of cookies - reusable and tuned for server side performance.
@@ -40,6 +41,9 @@ public final class Cookies {
 
     private static final UserDataHelper userDataLog = new UserDataHelper(log);
 
+    protected static final StringManager sm =
+            StringManager.getManager("org.apache.tomcat.util.http");
+
     // expected average number of cookies per request
     public static final int INITIAL_SIZE=4;
     ServerCookie scookies[]=new ServerCookie[INITIAL_SIZE];
@@ -350,9 +354,13 @@ public final class Cookies {
                         // INVALID COOKIE, advance to next delimiter
                         // The starting character of the cookie value was
                         // not valid.
-                        if (userDataLog.isEnabled()) {
-                            userDataLog.log("Cookies: Invalid cookie. " +
-                                    "Value not a token or quoted value");
+                        UserDataHelper.Mode logMode = userDataLog.getNextMode();
+                        if (logMode != null) {
+                            String message = sm.getString("cookies.invalidCookieToken");
+                            if (logMode.fallToDebug()) {
+                                message += sm.getString("cookies.fallToDebug");
+                            }
+                            userDataLog.log(logMode, message);
                         }
                         while (pos < end && bytes[pos] != ';' &&
                                bytes[pos] != ',')
@@ -434,8 +442,13 @@ public final class Cookies {
                 }
 
                 // Unknown cookie, complain
-                if (userDataLog.isEnabled()) {
-                    userDataLog.log("Cookies: Unknown Special Cookie");
+                UserDataHelper.Mode logMode = userDataLog.getNextMode();
+                if (logMode != null) {
+                    String message = sm.getString("cookies.invalidSpecial");
+                    if (logMode.fallToDebug()) {
+                        message += sm.getString("cookies.fallToDebug");
+                    }
+                    userDataLog.log(logMode, message);
                 }
             } else { // Normal Cookie
                 if (valueStart == -1 && !CookieSupport.ALLOW_NAME_ONLY) {

Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/LocalStrings.properties?rev=1224654&r1=1224653&r2=1224654&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/LocalStrings.properties (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/http/LocalStrings.properties Sun Dec 25 22:51:56 2011
@@ -21,3 +21,7 @@ parameters.invalidChunk=Invalid chunk st
 parameters.maxCountFail=More than the maximum number of request parameters (GET plus POST) for a single request ([{0}]) were detected. Any parameters beyond this limit have been ignored. To change this limit, set the maxParameterCount attribute on the Connector.
 parameters.multipleDecodingFail=Character decoding failed. A total of [{0}] failures were detected but only the first was logged. Enable debug level logging for this logger to log all failures.
 parameters.noequal=Parameter starting at position [{0}] and ending at position [{1}] with a value of [{0}] was not followed by an '=' character
+
+cookies.invalidCookieToken=Cookies: Invalid cookie. Value not a token or quoted value
+cookies.invalidSpecial=Cookies: Unknown Special Cookie
+cookies.fallToDebug=\n Note: further occurrences of Cookie errors will be logged at DEBUG level.

Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1224654&r1=1224653&r2=1224654&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Sun Dec 25 22:51:56 2011
@@ -59,7 +59,7 @@
       <add>
         <bug>52184</bug>: Provide greater control over the logging of errors
         triggered by invalid input data (i.e. data over which Tomcat has no
-        control). (markt) 
+        control). (markt/kkolinko) 
       </add>
       <fix>
         <bug>52225</bug>: Fix ClassCastException in an Alias added to

Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/systemprops.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/systemprops.xml?rev=1224654&r1=1224653&r2=1224654&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/config/systemprops.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/systemprops.xml Sun Dec 25 22:51:56 2011
@@ -511,7 +511,8 @@
          property controls how long messages are logged at DEBUG after a message
          has been logged at INFO. Once this period has elapsed, the next message
          will be logged at INFO followed by a new suppression period where
-         messages are logged at DEBUG and so on.</p>
+         messages are logged at DEBUG and so on. The value is measured
+         in seconds.</p>
       <p>A value of <code>0</code> is equivalent to using <code>INFO_ALL</code>
          for <code>org.apache.juli.logging.UserDataHelper.CONFIG</code>.</p>
       <p>A negative value means an infinite suppression period.</p>



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