Author: rgoers
Date: Mon Mar 4 00:00:54 2013
New Revision: 1452155
URL: http://svn.apache.org/r1452155
Log:
LOG4J2-167 - Configurator throws a ClassCastException if LogManager returns a
SimpleLoggerContext.
Added:
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
logging/log4j/log4j2/trunk/src/changes/changes.xml
Modified:
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
URL:
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java?rev=1452155&r1=1452154&r2=1452155&view=diff
==============================================================================
---
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
(original)
+++
logging/log4j/log4j2/trunk/core/src/main/java/org/apache/logging/log4j/core/config/Configurator.java
Mon Mar 4 00:00:54 2013
@@ -17,15 +17,22 @@
package org.apache.logging.log4j.core.config;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.LoggingException;
import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.status.StatusData;
+import org.apache.logging.log4j.status.StatusLogger;
+
import java.net.URI;
import java.net.URISyntaxException;
+import java.util.List;
/**
* Initializes and configure the Logging system.
*/
public final class Configurator {
+ private static final StatusLogger LOGGER = StatusLogger.getLogger();
+
private Configurator() {
}
@@ -57,10 +64,16 @@ public final class Configurator {
public static LoggerContext initialize(final String name, final
ClassLoader loader, final URI configLocation) {
try {
- final LoggerContext ctx = (LoggerContext)
LogManager.getContext(loader, false, configLocation);
- final Configuration config =
ConfigurationFactory.getInstance().getConfiguration(name, configLocation);
- ctx.setConfiguration(config);
- return ctx;
+ org.apache.logging.log4j.spi.LoggerContext context =
LogManager.getContext(loader, false, configLocation);
+ if (context instanceof LoggerContext) {
+ final LoggerContext ctx = (LoggerContext) context;
+ final Configuration config =
ConfigurationFactory.getInstance().getConfiguration(name, configLocation);
+ ctx.setConfiguration(config);
+ return ctx;
+ } else {
+ LOGGER.error("LogManager returned an instance of {} which does
not implement {}. Unable to initialize Log4j",
+ context.getClass().getName(),
LoggerContext.class.getName());
+ }
} catch (final Exception ex) {
ex.printStackTrace();
}
@@ -83,10 +96,16 @@ public final class Configurator {
} catch (Exception ex) {
// Invalid source location.
}
- final LoggerContext ctx = (LoggerContext)
LogManager.getContext(loader, false, configLocation);
- final Configuration config =
ConfigurationFactory.getInstance().getConfiguration(source);
- ctx.setConfiguration(config);
- return ctx;
+ org.apache.logging.log4j.spi.LoggerContext context =
LogManager.getContext(loader, false, configLocation);
+ if (context instanceof LoggerContext) {
+ final LoggerContext ctx = (LoggerContext) context;
+ final Configuration config =
ConfigurationFactory.getInstance().getConfiguration(source);
+ ctx.setConfiguration(config);
+ return ctx;
+ } else {
+ LOGGER.error("LogManager returned an instance of {} which does
not implement {}. Unable to initialize Log4j",
+ context.getClass().getName(),
LoggerContext.class.getName());
+ }
} catch (final Exception ex) {
ex.printStackTrace();
}
Added:
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
URL:
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java?rev=1452155&view=auto
==============================================================================
---
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
(added)
+++
logging/log4j/log4j2/trunk/core/src/test/java/org/apache/logging/log4j/core/config/TestConfiguratorError.java
Mon Mar 4 00:00:54 2013
@@ -0,0 +1,50 @@
+/*
+ * 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.logging.log4j.core.config;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.simple.SimpleLoggerContextFactory;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.util.Map;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ *
+ */
+public class TestConfiguratorError {
+
+ private static final String FACTORY_PROPERTY_NAME =
"log4j2.loggerContextFactory";
+
+ @BeforeClass
+ public static void beforeClass() {
+ System.setProperty(FACTORY_PROPERTY_NAME,
SimpleLoggerContextFactory.class.getName());
+ }
+
+ @Test
+ public void testError() throws Exception {
+ final LoggerContext ctx = Configurator.initialize("Test1", null,
"target/test-classes/log4j2-config.xml");
+ assertNull("No LoggerContext should have been returned", ctx);
+ }
+}
Modified: logging/log4j/log4j2/trunk/src/changes/changes.xml
URL:
http://svn.apache.org/viewvc/logging/log4j/log4j2/trunk/src/changes/changes.xml?rev=1452155&r1=1452154&r2=1452155&view=diff
==============================================================================
--- logging/log4j/log4j2/trunk/src/changes/changes.xml (original)
+++ logging/log4j/log4j2/trunk/src/changes/changes.xml Mon Mar 4 00:00:54 2013
@@ -23,6 +23,9 @@
<body>
<release version="2.0-beta5" date="@TBD@" description="Bug fixes and
enhancements">
+ <action issue="LOG4J2-167" dev="rgoers" type="fix">
+ Configurator throws a ClassCastException if LogManager returns a
SimpleLoggerContext.
+ </action>
<action issue="LOG4J2-169" dev="rgoers" type="fix">
ConfigurationFactory was adding factories on every call.
</action>