Bläddra i källkod

#1785 add default log manager

Shinsuke Sugaya 7 år sedan
förälder
incheckning
2d3c456293
1 ändrade filer med 43 tillägg och 3 borttagningar
  1. 43 3
      src/main/java/org/codelibs/fess/FessLogManager.java

+ 43 - 3
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<LogManager>() {
+            @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);