You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/02/12 10:47:14 UTC

svn commit: r1659184 - /tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java

Author: markt
Date: Thu Feb 12 09:47:14 2015
New Revision: 1659184

URL: http://svn.apache.org/r1659184
Log:
Fix FindBugs warnings re possible Logger configuration loss

Modified:
    tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java

Modified: tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java?rev=1659184&r1=1659183&r2=1659184&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java (original)
+++ tomcat/trunk/java/org/apache/catalina/startup/Tomcat.java Thu Feb 12 09:47:14 2015
@@ -24,8 +24,10 @@ import java.net.URL;
 import java.security.Principal;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.Stack;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
@@ -124,6 +126,13 @@ import org.apache.tomcat.util.descriptor
  * @author Costin Manolache
  */
 public class Tomcat {
+    // Some logging implementations use weak references for loggers so there is
+    // the possibility that logging configuration could be lost if GC runs just
+    // after Loggers are configured but before they are used. The purpose of
+    // this Sety is to retain strong references to explicitly configured loggers
+    // so that configuration is not lost.
+    private final Set<Logger> pinnedLoggers = new HashSet<>();
+
     // Single engine, service, server, connector - few cases need more,
     // they can use server.xml
     protected Server server;
@@ -663,16 +672,20 @@ public class Tomcat {
      */
     public void setSilent(boolean silent) {
         for (String s : silences) {
+            Logger logger = Logger.getLogger(s);
+            pinnedLoggers.add(logger);
             if (silent) {
-                Logger.getLogger(s).setLevel(Level.WARNING);
+                logger.setLevel(Level.WARNING);
             } else {
-                Logger.getLogger(s).setLevel(Level.INFO);
+                logger.setLevel(Level.INFO);
             }
         }
     }
 
     private void silence(Host host, String ctx) {
-        Logger.getLogger(getLoggerName(host, ctx)).setLevel(Level.WARNING);
+        Logger logger = Logger.getLogger(getLoggerName(host, ctx));
+        pinnedLoggers.add(logger);
+        logger.setLevel(Level.WARNING);
     }
 
     private String getLoggerName(Host host, String ctx) {



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