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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org