You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/01/30 19:00:46 UTC

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

Author: rmannibucau
Date: Mon Jan 30 18:00:46 2012
New Revision: 1237858

URL: http://svn.apache.org/viewvc?rev=1237858&view=rev
Log:
OPENEJB-1761 if handlers are not set on known loggers simply override them with a SimpleLayout like handler

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

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java?rev=1237858&r1=1237857&r2=1237858&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java Mon Jan 30 18:00:46 2012
@@ -16,15 +16,9 @@
  */
 package org.apache.openejb.util;
 
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
 import java.util.logging.ConsoleHandler;
-import java.util.logging.Handler;
+import java.util.logging.Level;
 import java.util.logging.LogManager;
-import java.util.logging.Logger;
 
 /**
  * default conf = jre conf
@@ -40,39 +34,41 @@ public class JuliLogStreamFactory implem
         final boolean embedded = is("org.apache.tomee.embedded.Container");
 
         // if embedded case enhance a bit logging if not set
-        if (!tomee || embedded) {
-            final Class<LogCategory> clazz = LogCategory.class;
-            final List<String> loggerNames = new ArrayList<String>();
-            final Enumeration<String> names = LogManager.getLogManager().getLoggerNames();
-            while (names.hasMoreElements()) {
-                loggerNames.add(names.nextElement());
-            }
+        if ((!tomee || embedded) && System.getProperty("java.util.logging.manager") == null) {
+            System.setProperty("java.util.logging.manager", OpenEJBLogManager.class.getName());
+        }
+    }
 
-            for (Field constant : clazz.getFields()) {
-                int modifiers = constant.getModifiers();
-                if (Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers)) {
-                    final String name;
-                    try {
-                        name = ((LogCategory) constant.get(null)).getName();
-                    } catch (IllegalAccessException e) {
-                        continue;
-                    }
-                    if (name.contains(".")) { // only parents
-                        continue;
-                    }
-                    if (!loggerNames.contains(name)) { // no conf
-                        final Logger logger = java.util.logging.Logger.getLogger(name);
-                        logger.setUseParentHandlers(false);
-                        LogManager.getLogManager().addLogger(logger);
-                        if (logger.getHandlers().length == 0) {
-                            logger.addHandler(new ConsoleHandler());
-                        }
-                        for (Handler h : logger.getHandlers()) {
-                            h.setFormatter(new SingleLineFormatter());
-                        }
-                    }
+    public static class OpenEJBLogManager extends LogManager {
+        @Override
+        public String getProperty(final String name) {
+            final String parentValue = super.getProperty(name);
+            // if it is one of ours loggers and no value is defined let set our nice logging style
+            if (OpenEJBLogManager.class.getName().equals(System.getProperty("java.util.logging.manager")) // custom loggin
+                    && isOverridableLogger(name) // managed loggers
+                    && parentValue == null) { // not already defined
+                if (name.endsWith(".handlers")) {
+                    return OpenEJBSimpleLayoutHandler.class.getName();
+                } else if (name.endsWith(".useParentHandlers")) {
+                    return "false";
                 }
             }
+            return super.getProperty(name);
+        }
+
+        private static boolean isOverridableLogger(String name) {
+            return name.toLowerCase().contains("openejb")
+                    || name.toLowerCase().contains("transaction")
+                    || name.toLowerCase().contains("cxf")
+                    || name.toLowerCase().contains("timer")
+                    || name.startsWith("org.apache.");
+        }
+    }
+
+    public static class OpenEJBSimpleLayoutHandler extends ConsoleHandler {
+        public OpenEJBSimpleLayoutHandler() {
+            setFormatter(new SingleLineFormatter());
+            setLevel(Level.INFO);
         }
     }