You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/01/26 22:34:24 UTC

svn commit: r1236394 - /openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java

Author: dblevins
Date: Thu Jan 26 21:34:24 2012
New Revision: 1236394

URL: http://svn.apache.org/viewvc?rev=1236394&view=rev
Log:
Refined the checking for OPENEJB-1760

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java?rev=1236394&r1=1236393&r2=1236394&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java Thu Jan 26 21:34:24 2012
@@ -71,45 +71,85 @@ public class Logger {
 
         if (factoryName != null) {
 
-            Class<?> factoryClass = null;
+            logStreamFactory = createFactory(factoryName);
+        }
 
-            final ClassLoader classLoader = Logger.class.getClassLoader();
+        if (isLog4jImplied()) {
+            logStreamFactory = createFactory("org.apache.openejb.util.Log4jLogStreamFactory");
+        }
 
-            if (classLoader != null) {
-                try {
-                    factoryClass = classLoader.loadClass(factoryName);
-                } catch (Throwable e) {
-                    try {
-                        factoryClass = Thread.currentThread().getContextClassLoader().loadClass(factoryName);
-                    } catch (ClassNotFoundException e1) {
-                        // ignored
-                    }
-                }
-            }
+        //Fall back -> JUL
+        if (logStreamFactory == null) {
+            logStreamFactory = new JuliLogStreamFactory();
+        }
 
-            if (factoryClass == null) {
-                try {
-                    factoryClass = Class.forName(factoryName);
-                } catch (Throwable e) {
-                    //Ignore
-                }
+        checkForIgnoredLog4jConfig();
+    }
+
+    private static void checkForIgnoredLog4jConfig() {
+        if (logStreamFactory.getClass().getName().equals("org.apache.openejb.util.Log4jLogStreamFactory")) return;
+
+        try {
+            final Properties configFile = log4j(loadLoggingProperties());
+
+            final Properties systemProperties = log4j(SystemInstance.get().getProperties());
+
+            if (configFile.size() == 0 && systemProperties.size() == 0) return;
+
+            final LogStream stream = logStreamFactory.createLogStream(LogCategory.OPENEJB);
+
+            stream.warn("Log4j not installed. The following properties will be ignored.");
+
+            final String format = "Ignored %s property '%s'";
+
+            for (Object key : configFile.keySet()) {
+                stream.warn(String.format(format, "conf/logging.properties", key));
             }
 
-            if (factoryClass != null) {
-                try {
-                    //Try and use the user specified factory
-                    logStreamFactory = (LogStreamFactory) factoryClass.newInstance();
-                    return;
-                } catch (Throwable e) {
-                    //Ignore
-                }
+            for (Object key : systemProperties.keySet()) {
+                stream.warn(String.format(format, "Property overrides", key));
             }
+        } catch (Throwable e) {
+            // added strong catch block just in case
+            // This check is only a convenience
         }
+    }
 
-        if (isLog4jImplied())
+    private static LogStreamFactory createFactory(String factoryName) {
 
-        //Fall back -> JUL
-        logStreamFactory = new JuliLogStreamFactory();
+        final Class<?> factoryClass = load(factoryName);
+
+        if (factoryClass == null) return null;
+
+        try {
+            //Try and use the user specified factory
+            return (LogStreamFactory) factoryClass.newInstance();
+        } catch (Throwable e) {
+            //Ignore
+        }
+
+        return null;
+    }
+
+    private static Class<?> load(String factoryName) {
+        try {
+            final ClassLoader classLoader = Logger.class.getClassLoader();
+            return classLoader.loadClass(factoryName);
+        } catch (Throwable e) {
+        }
+
+        try {
+            final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+            return contextClassLoader.loadClass(factoryName);
+        } catch (Throwable e1) {
+        }
+
+        try {
+            return Class.forName(factoryName);
+        } catch (Throwable  e2) {
+        }
+
+        return null;
     }
 
     /**
@@ -224,14 +264,17 @@ public class Logger {
 
     public static boolean isLog4jImplied() {
 
-        final Properties configFile = log4j(loadLoggingProperties());
+        final List<String> locations = new ArrayList<String>();
 
-        final Properties systemProperties = log4j(SystemInstance.get().getProperties());
+        {
+            final Properties configFile = log4j(loadLoggingProperties());
 
-        final List<String> locations = new ArrayList<String>();
+            final Properties systemProperties = log4j(SystemInstance.get().getProperties());
+
+            if (configFile.size() > 0) locations.add("conf/logging.properties");
+            if (systemProperties.size() > 0) locations.add("Properties overrides");
+        }
 
-        if (configFile.size() > 0) locations.add("conf/logging.properties");
-        if (systemProperties.size() > 0) locations.add("Properties overrides");
 
         if (locations.size() > 0) {
             if (exists("org.apache.log4j.Logger")) {
@@ -241,10 +284,6 @@ public class Logger {
                 return true;
 
             } else {
-                System.out.println(String.format("Log4j settings specified in %s will be ignored as Log4j has not been added to the classpath.", Join.join(" and ", locations)));
-
-                printIgnored(configFile, "conf/logging.properties");
-                printIgnored(systemProperties, "Property overrides");
 
                 return false;
             }
@@ -253,21 +292,8 @@ public class Logger {
         return false;
     }
 
-    private static void printIgnored(Properties systemProperties, String location) {
-        for (Object key : systemProperties.keySet()) {
-            final String s = String.format("Ignored %s property '%s'", location, key);
-            System.out.println(s);
-        }
-    }
-
     private static boolean exists(String s) {
-        try {
-            final ClassLoader loader = Thread.currentThread().getContextClassLoader();
-            loader.loadClass(s);
-            return true;
-        } catch (Throwable e) {
-            return false;
-        }
+        return load(s) != null;
     }
 
     private static Properties log4j(Properties system) {