Index: src/java/org/apache/poi/util/POILogFactory.java =================================================================== --- src/java/org/apache/poi/util/POILogFactory.java (revision 638345) +++ src/java/org/apache/poi/util/POILogFactory.java (working copy) @@ -36,7 +36,12 @@ // map of POILogger instances, with classes as keys private static Map _loggers = new HashMap();; + // logger implementation class to use, most often will be null + private static String _loggerClassName = System.getProperty("org.apache.poi.util.POILogger"); + // default logger to use when nothing else is specified + private static POILogger _defaultLogger = new NullLogger(); + /** * construct a POILogFactory. */ @@ -70,25 +75,33 @@ { POILogger logger = null; - if (_loggers.containsKey(cat)) + if (_loggerClassName == null) { - logger = ( POILogger ) _loggers.get(cat); + // Use the default logger if nothing else is specified + // It is threadsafe and doesn't care about cateogries + logger = _defaultLogger; } else { - try{ - String loggerClassName = System.getProperty("org.apache.poi.util.POILogger"); - Class loggerClass = Class.forName(loggerClassName); - logger = ( POILogger ) loggerClass.newInstance(); + // This is not threadsafe, but is only lightly + // used for debugging poi itself + if (_loggers.containsKey(cat)) + { + logger = ( POILogger ) _loggers.get(cat); } - catch(Exception e){ - - logger = new NullLogger(); + else + { + try{ + Class loggerClass = Class.forName(_loggerClassName); + logger = ( POILogger ) loggerClass.newInstance(); + logger.initialize(cat); + } + catch(Exception e){ + logger = _defaultLogger; + } + + _loggers.put(cat, logger); } - - logger.initialize(cat); - - _loggers.put(cat, logger); } return logger; }