diff --git a/src/main/java/org/codelibs/fess/FessLogManager.java b/src/main/java/org/codelibs/fess/FessLogManager.java index 4dfbbee99..1416104bf 100644 --- a/src/main/java/org/codelibs/fess/FessLogManager.java +++ b/src/main/java/org/codelibs/fess/FessLogManager.java @@ -15,6 +15,8 @@ */ package org.codelibs.fess; +import java.security.AccessController; +import java.security.PrivilegedAction; import java.util.logging.LogManager; import java.util.logging.Logger; @@ -22,16 +24,54 @@ public class FessLogManager extends LogManager { private static final String ORG_APACHE_LOGGING_LOG4J_JUL_LOG_MANAGER = "org.apache.logging.log4j.jul.LogManager"; + private static final LogManager manager; + + static { + manager = AccessController.doPrivileged(new PrivilegedAction() { + @Override + public LogManager run() { + LogManager mgr = null; + String cname = null; + try { + cname = System.getProperty("java.util.logging.manager"); + if (cname != null) { + try { + Class clz = ClassLoader.getSystemClassLoader().loadClass(cname); + mgr = (LogManager) clz.newInstance(); + } catch (ClassNotFoundException ex) { + Class clz = Thread.currentThread().getContextClassLoader().loadClass(cname); + mgr = (LogManager) clz.newInstance(); + } + } + } catch (Exception ex) { + System.err.println("Could not load Logmanager \"" + cname + "\""); + ex.printStackTrace(); + } + if (mgr == null) { + mgr = new DefaultLogManager(); + } + return mgr; + + } + }); + } + + private static class DefaultLogManager extends LogManager { + DefaultLogManager() { + super(); + } + } + @Override public Logger getLogger(final String name) { - final LogManager logManager = getLogManager(ORG_APACHE_LOGGING_LOG4J_JUL_LOG_MANAGER); + final LogManager logManager = createLogManager(ORG_APACHE_LOGGING_LOG4J_JUL_LOG_MANAGER); if (logManager != null) { return logManager.getLogger(name); } - return LogManager.getLogManager().getLogger(name); + return manager.getLogger(name); } - private LogManager getLogManager(final String cname) { + private LogManager createLogManager(final String cname) { try { try { final Class clz = ClassLoader.getSystemClassLoader().loadClass(cname);