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 2014/08/22 20:11:16 UTC

svn commit: r1619878 - in /tomee/tomee/trunk: ./ container/openejb-core/ container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/ container/openejb-core/src/main/java/org/apache/openejb/dyni/ container/openejb-core/src/main/java/org/apache/...

Author: rmannibucau
Date: Fri Aug 22 18:11:16 2014
New Revision: 1619878

URL: http://svn.apache.org/r1619878
Log:
TOMEE-1327 log4j2 integration

Added:
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4j2LoggerFactory.java
      - copied, changed from r1618689, tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4j2Logger.java
      - copied, changed from r1618689, tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4j2LogStreamFactory.java
    tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4j2Log.java
      - copied, changed from r1618689, tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java
Modified:
    tomee/tomee/trunk/container/openejb-core/pom.xml
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
    tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
    tomee/tomee/trunk/pom.xml
    tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java
    tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java
    tomee/tomee/trunk/tomee/tomee-loader/pom.xml

Modified: tomee/tomee/trunk/container/openejb-core/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/pom.xml?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/pom.xml (original)
+++ tomee/tomee/trunk/container/openejb-core/pom.xml Fri Aug 22 18:11:16 2014
@@ -430,6 +430,12 @@
       <scope>provided</scope>
     </dependency>
     <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <version>${log4j2.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
       <artifactId>commons-lang3</artifactId>
       <groupId>org.apache.commons</groupId>
     </dependency>

Copied: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4j2LoggerFactory.java (from r1618689, tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4j2LoggerFactory.java?p2=tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4j2LoggerFactory.java&p1=tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java&r1=1618689&r2=1619878&rev=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4j2LoggerFactory.java Fri Aug 22 18:11:16 2014
@@ -17,21 +17,21 @@
 
 package org.apache.openejb.cdi.logging;
 
-import org.apache.openejb.log.logger.Log4jLogger;
+import org.apache.openejb.log.logger.Log4j2Logger;
 import org.apache.webbeans.logger.WebBeansLoggerFactory;
 
 import java.util.Locale;
 import java.util.ResourceBundle;
 import java.util.logging.Logger;
 
-public class Log4jLoggerFactory implements WebBeansLoggerFactory {
+public class Log4j2LoggerFactory implements WebBeansLoggerFactory {
     @Override
     public Logger getLogger(final Class<?> clazz, final Locale desiredLocale) {
-        return new Log4jLogger(clazz.getName(), ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
+        return new Log4j2Logger(clazz.getName(), ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
     }
 
     @Override
     public Logger getLogger(final Class<?> clazz) {
-        return new Log4jLogger(clazz.getName(), "openwebbeans/Messages");
+        return new Log4j2Logger(clazz.getName(), "openwebbeans/Messages");
     }
 }

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/dyni/DynamicSubclass.java Fri Aug 22 18:11:16 2014
@@ -41,7 +41,6 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.locks.ReentrantLock;

Copied: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4j2Logger.java (from r1618689, tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4j2Logger.java?p2=tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4j2Logger.java&p1=tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java&r1=1618689&r2=1619878&rev=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4j2Logger.java Fri Aug 22 18:11:16 2014
@@ -17,185 +17,82 @@
 
 package org.apache.openejb.log.logger;
 
-import org.apache.log4j.Appender;
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.Priority;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.Enumeration;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.logging.Handler;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 
-/**
- * java.util.logging.Logger implementation delegating to Log4j.
- * All methods can be used except:
- * setLevel
- * addHandler / getHandlers
- * setParent / getParent
- * setUseParentHandlers / getUseParentHandlers
- *
- * @author gnodet
- */
-public class Log4jLogger extends AbstractDelegatingLogger {
-    private static final Map<Level, org.apache.log4j.Level> TO_LOG4J = new HashMap<Level, org.apache.log4j.Level>();
-    private static final org.apache.log4j.Level TRACE;
+public class Log4j2Logger extends AbstractDelegatingLogger {
+    private static final Map<Level, org.apache.logging.log4j.Level> TO_LOG4J = new HashMap<>();
 
     private final Logger log;
 
     static {
         //older versions of log4j don't have TRACE, use debug
-        org.apache.log4j.Level t = org.apache.log4j.Level.DEBUG;
-        try {
-            final Field f = org.apache.log4j.Level.class.getField("TRACE");
-            t = (org.apache.log4j.Level) f.get(null);
-        } catch (final Throwable ex) {
-            //ignore, assume old version of log4j
-        }
-        TRACE = t;
+        org.apache.logging.log4j.Level t = org.apache.logging.log4j.Level.DEBUG;
 
-        TO_LOG4J.put(Level.ALL, org.apache.log4j.Level.ALL);
-        TO_LOG4J.put(Level.SEVERE, org.apache.log4j.Level.ERROR);
-        TO_LOG4J.put(Level.WARNING, org.apache.log4j.Level.WARN);
-        TO_LOG4J.put(Level.INFO, org.apache.log4j.Level.INFO);
-        TO_LOG4J.put(Level.CONFIG, org.apache.log4j.Level.DEBUG);
-        TO_LOG4J.put(Level.FINE, org.apache.log4j.Level.DEBUG);
-        TO_LOG4J.put(Level.FINER, TRACE);
-        TO_LOG4J.put(Level.FINEST, TRACE);
-        TO_LOG4J.put(Level.OFF, org.apache.log4j.Level.OFF);
+        TO_LOG4J.put(Level.ALL, org.apache.logging.log4j.Level.ALL);
+        TO_LOG4J.put(Level.SEVERE, org.apache.logging.log4j.Level.ERROR);
+        TO_LOG4J.put(Level.WARNING, org.apache.logging.log4j.Level.WARN);
+        TO_LOG4J.put(Level.INFO, org.apache.logging.log4j.Level.INFO);
+        TO_LOG4J.put(Level.CONFIG, org.apache.logging.log4j.Level.DEBUG);
+        TO_LOG4J.put(Level.FINE, org.apache.logging.log4j.Level.DEBUG);
+        TO_LOG4J.put(Level.FINER, org.apache.logging.log4j.Level.TRACE);
+        TO_LOG4J.put(Level.FINEST, org.apache.logging.log4j.Level.TRACE);
+        TO_LOG4J.put(Level.OFF, org.apache.logging.log4j.Level.OFF);
     }
 
-    public Log4jLogger(final String name, final String resourceBundleName) {
+    public Log4j2Logger(final String name, final String resourceBundleName) {
         super(name, resourceBundleName);
         log = LogManager.getLogger(name);
     }
 
     public Level getLevel() {
-        final org.apache.log4j.Level l = log.getEffectiveLevel();
+        final org.apache.logging.log4j.Level l = log.getLevel();
         if (l != null) {
             return fromL4J(l);
         }
         return null;
     }
 
-    public void setLevel(final Level newLevel) throws SecurityException {
-        log.setLevel(TO_LOG4J.get(newLevel));
-    }
-
-    public synchronized void addHandler(final Handler handler) throws SecurityException {
-        log.addAppender(new HandlerWrapper(handler));
-    }
-
-    public synchronized void removeHandler(final Handler handler) throws SecurityException {
-        log.removeAppender("HandlerWrapper-" + handler.hashCode());
-    }
-
-    public synchronized Handler[] getHandlers() {
-        final List<Handler> ret = new ArrayList<Handler>();
-        final Enumeration<?> en = log.getAllAppenders();
-        while (en.hasMoreElements()) {
-            final Appender ap = (Appender) en.nextElement();
-            if (ap instanceof HandlerWrapper) {
-                ret.add(((HandlerWrapper) ap).getHandler());
-            }
-        }
-        return ret.toArray(new Handler[ret.size()]);
-    }
-
     protected void internalLogFormatted(final String msg, final LogRecord record) {
-        log.log(AbstractDelegatingLogger.class.getName(),
-            TO_LOG4J.get(record.getLevel()),
-            msg,
-            record.getThrown());
+        log.log(TO_LOG4J.get(record.getLevel()), msg, record.getThrown());
     }
 
 
-    private Level fromL4J(final org.apache.log4j.Level l) {
+    private Level fromL4J(final org.apache.logging.log4j.Level l) {
         Level l2 = null;
-        switch (l.toInt()) {
-            case org.apache.log4j.Level.ALL_INT:
+        switch (l.getStandardLevel()) {
+            case ALL:
                 l2 = Level.ALL;
                 break;
-            case org.apache.log4j.Level.FATAL_INT:
+            case FATAL:
                 l2 = Level.SEVERE;
                 break;
-            case org.apache.log4j.Level.ERROR_INT:
+            case ERROR:
                 l2 = Level.SEVERE;
                 break;
-            case org.apache.log4j.Level.WARN_INT:
+            case WARN:
                 l2 = Level.WARNING;
                 break;
-            case org.apache.log4j.Level.INFO_INT:
+            case INFO:
                 l2 = Level.INFO;
                 break;
-            case org.apache.log4j.Level.DEBUG_INT:
+            case DEBUG:
                 l2 = Level.FINE;
                 break;
-            case org.apache.log4j.Level.OFF_INT:
+            case OFF:
                 l2 = Level.OFF;
                 break;
+            case TRACE:
+                l2 = Level.FINEST;
+                break;
             default:
-                if (l.toInt() == TRACE.toInt()) {
-                    l2 = Level.FINEST;
-                }
+                l2 = Level.FINE;
         }
         return l2;
     }
-
-
-    private class HandlerWrapper extends AppenderSkeleton {
-        Handler handler;
-
-        public HandlerWrapper(final Handler h) {
-            handler = h;
-            name = "HandlerWrapper-" + h.hashCode();
-        }
-
-        public Handler getHandler() {
-            return handler;
-        }
-
-        @Override
-        protected void append(final LoggingEvent event) {
-            final LogRecord lr = new LogRecord(fromL4J(event.getLevel()),
-                event.getMessage().toString());
-            lr.setLoggerName(event.getLoggerName());
-            if (event.getThrowableInformation() != null) {
-                lr.setThrown(event.getThrowableInformation().getThrowable());
-            }
-            final String rbname = getResourceBundleName();
-            if (rbname != null) {
-                lr.setResourceBundleName(rbname);
-                lr.setResourceBundle(getResourceBundle());
-            }
-            handler.publish(lr);
-        }
-
-        public void close() {
-            handler.close();
-            closed = true;
-        }
-
-        public boolean requiresLayout() {
-            return false;
-        }
-
-        @Override
-        public Priority getThreshold() {
-            return TO_LOG4J.get(handler.getLevel());
-        }
-
-        @Override
-        public boolean isAsSevereAsThreshold(final Priority priority) {
-            final Priority p = getThreshold();
-            return p == null || priority.isGreaterOrEqual(p);
-        }
-    }
 }

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Fri Aug 22 18:11:16 2014
@@ -73,7 +73,6 @@ import org.apache.webbeans.spi.ContextsS
 import org.apache.webbeans.spi.LoaderService;
 import org.apache.webbeans.web.lifecycle.test.MockHttpSession;
 import org.apache.webbeans.web.lifecycle.test.MockServletContext;
-import org.apache.xbean.finder.Annotated;
 import org.apache.xbean.finder.AnnotationFinder;
 import org.apache.xbean.finder.ClassFinder;
 import org.apache.xbean.finder.IAnnotationFinder;
@@ -85,8 +84,6 @@ import org.apache.xbean.finder.archive.C
 import org.apache.xbean.finder.archive.JarArchive;
 import org.xml.sax.InputSource;
 
-import javax.ejb.Singleton;
-import javax.ejb.Stateless;
 import javax.enterprise.context.ConversationScoped;
 import javax.enterprise.context.RequestScoped;
 import javax.enterprise.context.SessionScoped;

Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4j2LogStreamFactory.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4j2LogStreamFactory.java?rev=1619878&view=auto
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4j2LogStreamFactory.java (added)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Log4j2LogStreamFactory.java Fri Aug 22 18:11:16 2014
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.util;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+// don't do the same "error" (historical actually) that in log4j one putting too much logic here
+public class Log4j2LogStreamFactory implements LogStreamFactory {
+    public Log4j2LogStreamFactory() {
+        // WARN: don't set all subproject loggers to log4j since API is not the same
+        // and it needs log4j1 fallback module to "work" (some parts are broken like config)
+        System.setProperty("openwebbeans.logging.factory", "org.apache.openejb.cdi.logging.Log4j2LoggerFactory");
+    }
+
+    @Override
+    public LogStream createLogStream(final LogCategory logCategory) {
+        return new Log4j2Stream(logCategory.getName());
+    }
+
+    private class Log4j2Stream implements LogStream {
+        private final Logger delegate;
+
+        public Log4j2Stream(final String name) {
+            this.delegate = LogManager.getLogger(name);
+        }
+
+        public boolean isFatalEnabled() {
+            return delegate.isFatalEnabled();
+        }
+
+        public void fatal(final String message) {
+            delegate.fatal(message);
+        }
+
+        public void fatal(final String message, final Throwable t) {
+            delegate.fatal(message, t);
+        }
+
+        public boolean isErrorEnabled() {
+            return delegate.isErrorEnabled();
+        }
+
+        public void error(final String message) {
+            delegate.error(message);
+        }
+
+        public void error(final String message, final Throwable t) {
+            delegate.error(message, t);
+        }
+
+        public boolean isWarnEnabled() {
+            return delegate.isWarnEnabled();
+        }
+
+        public void warn(final String message) {
+            delegate.warn(message);
+        }
+
+        public void warn(final String message, final Throwable t) {
+            delegate.warn(message, t);
+        }
+
+        public boolean isInfoEnabled() {
+            return delegate.isInfoEnabled();
+        }
+
+        public void info(final String message) {
+            delegate.info(message);
+        }
+
+        public void info(final String message, final Throwable t) {
+            delegate.info(message, t);
+        }
+
+        public boolean isDebugEnabled() {
+            return delegate.isDebugEnabled();
+        }
+
+        public void debug(final String message) {
+            delegate.debug(message);
+        }
+
+        public void debug(final String message, final Throwable t) {
+            delegate.debug(message, t);
+        }
+    }
+}

Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java Fri Aug 22 18:11:16 2014
@@ -55,15 +55,10 @@ public class Logger {
 
         //See if user factory has been specified
         String factoryName = SystemInstance.get().getOptions().get("openejb.log.factory", JuliLogStreamFactory.class.getName());
-
         if ("jul".equalsIgnoreCase(factoryName) || "juli".equalsIgnoreCase(factoryName)) {
-
             factoryName = JuliLogStreamFactory.class.getName();
-
         } else if ("slf4j".equalsIgnoreCase(factoryName)) {
-
             factoryName = Slf4jLogStreamFactory.class.getName();
-
         } else if ("log4j".equalsIgnoreCase(factoryName)) {
 
             if (exists("org.apache.log4j.Logger")) {
@@ -78,8 +73,9 @@ public class Logger {
             }
 
         } else if ("pax".equalsIgnoreCase(factoryName)) {
-
             factoryName = "org.apache.openejb.util.PaxLogStreamFactory";
+        } else if ("log4j2".equalsIgnoreCase(factoryName)) {
+            factoryName = "org.apache.openejb.util.Log4j2LogStreamFactory";
         }
 
         if (factoryName != null) {

Modified: tomee/tomee/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/pom.xml?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/pom.xml (original)
+++ tomee/tomee/trunk/pom.xml Fri Aug 22 18:11:16 2014
@@ -175,6 +175,7 @@
     <mojarra.version>2.1.28</mojarra.version>
     <slf4j.version>1.7.7</slf4j.version>
     <log4j.version>1.2.17</log4j.version>
+    <log4j2.version>2.0.1</log4j2.version>
     <osgi.framework.version>4.2.0</osgi.framework.version>
     <version.hsqldb>2.3.2</version.hsqldb>
     <version.axiom>1.2.14</version.axiom>

Modified: tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/ReloadableLog.java Fri Aug 22 18:11:16 2014
@@ -17,6 +17,7 @@
 package org.apache.tomee.jul.formatter.log;
 
 import org.apache.juli.logging.Log;
+import org.apache.openejb.loader.SystemInstance;
 
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.InvocationTargetException;
@@ -39,9 +40,10 @@ public final class ReloadableLog {
 
     private static final class ReloadableLogHandler implements InvocationHandler {
         private static final String LOG4J_IMPL = "org.apache.tomee.loader.log.Log4jLog";
+        private static final String LOG4J2_IMPL = "org.apache.tomee.loader.log.Log4j2Log";
         private static final String SLF4J_IMPL = "org.apache.tomee.loader.log.Slf4jLog";
 
-        private final String factory;
+        private volatile String factory;
         private final String name;
         private final AtomicReference<Log> delegate = new AtomicReference<>();
         private volatile boolean done = false;
@@ -58,9 +60,19 @@ public final class ReloadableLog {
             }
 
             try {
+                if (factory == null) {
+                    final String f = TomEELog.getLoggerClazz();
+                    if (f != null) {
+                        factory = f;
+                    }
+                }
                 switch (factory) {
                     case "org.apache.openejb.util.Log4jLogStreamFactory":
-                        delegate.set(newInstance(LOG4J_IMPL)); break;
+                        delegate.set(newInstance(LOG4J_IMPL));
+                        break;
+                    case "org.apache.openejb.util.Log4j2LogStreamFactory":
+                        delegate.set(newInstance(LOG4J2_IMPL));
+                        break;
                     case "org.apache.openejb.util.Slf4jLogStreamFactory":
                         delegate.set(newInstance(SLF4J_IMPL));
                         break;

Modified: tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-juli/src/main/java/org/apache/tomee/jul/formatter/log/TomEELog.java Fri Aug 22 18:11:16 2014
@@ -34,29 +34,34 @@ public class TomEELog implements Log {
             final Thread thread = Thread.currentThread();
             try {
                 final ClassLoader tccl = thread.getContextClassLoader();
+                final Class<?> systemInstance = tccl.loadClass("org.apache.openejb.loader.SystemInstance");
+                if (!Boolean.class.cast(systemInstance.getMethod("isInitialized").invoke(null))) {
+                    return;
+                }
+
                 final Class<?> logger = tccl.loadClass("org.apache.openejb.util.Logger");
                 final Method m = logger.getDeclaredMethod("delegateClass");
                 loggerClazz = (String) m.invoke(null);
                 switch (loggerClazz) {
+                    case "org.apache.openejb.util.Log4j2LogStreamFactory":
                     case "org.apache.openejb.util.Log4jLogStreamFactory":
-                        defaultLogger = false;
-                        initialized = true;
-                        return;
                     case "org.apache.openejb.util.Slf4jLogStreamFactory":
                         defaultLogger = false;
-                        initialized = true;
-                        return;
+                        break;
                     default:
                         defaultLogger = true;
-                        initialized = true;
-                        return;
                 }
+                initialized = true;
             } catch (final Throwable th) {
                 // no-op
             }
         }
     }
 
+    public static String getLoggerClazz() {
+        return loggerClazz;
+    }
+
     private final Log delegate;
 
     public TomEELog() { // for ServiceLoader

Modified: tomee/tomee/trunk/tomee/tomee-loader/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/pom.xml?rev=1619878&r1=1619877&r2=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/pom.xml Fri Aug 22 18:11:16 2014
@@ -54,6 +54,12 @@
       <artifactId>log4j</artifactId>
       <scope>provided</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <version>${log4j2.version}</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
 </project>

Copied: tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4j2Log.java (from r1618689, tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4j2Log.java?p2=tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4j2Log.java&p1=tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java&r1=1618689&r2=1619878&rev=1619878&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4jLog.java (original)
+++ tomee/tomee/trunk/tomee/tomee-loader/src/main/java/org/apache/tomee/loader/log/Log4j2Log.java Fri Aug 22 18:11:16 2014
@@ -18,14 +18,14 @@
 package org.apache.tomee.loader.log;
 
 import org.apache.juli.logging.Log;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
-public class Log4jLog implements Log {
+public class Log4j2Log implements Log {
     private final Logger log;
 
-    public Log4jLog(final String logger) {
-        this.log = Logger.getLogger(logger);
+    public Log4j2Log(final String logger) {
+        this.log = LogManager.getLogger(logger);
     }
 
     @Override
@@ -35,12 +35,12 @@ public class Log4jLog implements Log {
 
     @Override
     public boolean isErrorEnabled() {
-        return log.isEnabledFor(Level.ERROR);
+        return log.isErrorEnabled();
     }
 
     @Override
     public boolean isFatalEnabled() {
-        return log.isEnabledFor(Level.FATAL);
+        return log.isFatalEnabled();
     }
 
     @Override
@@ -50,12 +50,12 @@ public class Log4jLog implements Log {
 
     @Override
     public boolean isTraceEnabled() {
-        return log.isEnabledFor(Level.TRACE);
+        return log.isTraceEnabled();
     }
 
     @Override
     public boolean isWarnEnabled() {
-        return log.isEnabledFor(Level.WARN);
+        return log.isWarnEnabled();
     }
 
     @Override