Index: osgi/core-osgi-net/pom.xml
===================================================================
--- osgi/core-osgi-net/pom.xml (revision 1505664)
+++ osgi/core-osgi-net/pom.xml (working copy)
@@ -38,6 +38,19 @@
org.apache.logging.log4j
log4j-core
+
+ org.apache.geronimo.specs
+ geronimo-jms_1.1_spec
+
+
+ javax.mail
+ mail
+
+
+ org.apache.geronimo.specs
+ geronimo-activation_1.1_spec
+ 1.1
+
@@ -54,7 +67,6 @@
true
- false
<_nouses>true
@@ -68,7 +80,7 @@
${osgi.import}
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
Index: osgi/pom.xml
===================================================================
--- osgi/pom.xml (revision 1505664)
+++ osgi/pom.xml (working copy)
@@ -46,6 +46,8 @@
core-osgi-nosql-couch
core-osgi-nosql-mongo
core-osgi-reduced
+ core-osgi-web
+ core-osgi-test
Index: osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java
===================================================================
--- osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java (revision 0)
+++ osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java (working copy)
@@ -0,0 +1,53 @@
+/*
+ * 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.osgi.tests;
+
+import java.io.ByteArrayOutputStream;
+import java.io.Serializable;
+
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender;
+import org.apache.logging.log4j.core.appender.OutputStreamManager;
+import org.apache.logging.log4j.core.filter.CompositeFilter;
+
+/**
+ *
+ */
+public class InMemoryAppender extends AbstractOutputStreamAppender {
+
+ public InMemoryAppender(final String name, final Layout layout, final CompositeFilter filters,
+ final boolean ignoreExceptions) {
+ super(name, layout, filters, ignoreExceptions, true, new InMemoryManager(name, layout));
+ }
+
+ @Override
+ public String toString() {
+ return getManager().toString();
+ }
+
+ private static class InMemoryManager extends OutputStreamManager {
+
+ public InMemoryManager(final String name, final Layout layout) {
+ super(new ByteArrayOutputStream(), name, layout);
+ }
+
+ @Override
+ public String toString() {
+ return getOutputStream().toString();
+ }
+ }
+}
Index: osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java
===================================================================
--- osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java (revision 0)
+++ osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java (working copy)
Property changes on: osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/InMemoryAppender.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
Index: core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java
===================================================================
--- core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java (revision 1505664)
+++ core/src/main/java/org/apache/logging/log4j/core/config/LoggerConfig.java (working copy)
@@ -36,7 +36,6 @@
import org.apache.logging.log4j.core.Filter;
import org.apache.logging.log4j.core.LifeCycle;
import org.apache.logging.log4j.core.LogEvent;
-import org.apache.logging.log4j.core.async.AsyncLoggerContextSelector;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttr;
import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
@@ -482,7 +481,11 @@
// for synchronous loggers, includeLocation default is TRUE.
protected static boolean includeLocation(final String includeLocationConfigValue) {
if (includeLocationConfigValue == null) {
- final boolean sync = !AsyncLoggerContextSelector.class.getName()
+ // Originally this code used AsyncLoggerContextSelector.class.getName()
+ // but this introduces a cyclic package dependency and makes it impossible
+ // to separate the log4j JARs by function. As the class name is API
+ // (clients are setting it as a System property) there is no risk in hard-coding.
+ final boolean sync = !"org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"
.equals(System.getProperty(Constants.LOG4J_CONTEXT_SELECTOR));
return sync;
}
Index: core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java
===================================================================
--- core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java (revision 1505664)
+++ core/src/main/java/org/apache/logging/log4j/core/config/plugins/PluginManager.java (working copy)
@@ -229,8 +229,18 @@
final String name = dis.readUTF();
final boolean printable = dis.readBoolean();
final boolean defer = dis.readBoolean();
- final Class> clazz = Class.forName(className);
- types.put(key, new PluginType(clazz, name, printable, defer));
+ // We sometimes don't have the full set of dependencies available
+ // to load our plugins, for example the JMS and SMTP Appenders
+ // need the full o.a.l.l.core.net package, which isn't in the reduced
+ // log4j bundle, and so needs the core-net extension to be added.
+ try {
+ final Class> clazz = Class.forName(className);
+ types.put(key, new PluginType(clazz, name, printable, defer));
+ } catch (ClassNotFoundException cnfe) {
+ LOGGER.warn("Unable to preload plugin " + name, cnfe);
+ } catch (NoClassDefFoundError cnfe) {
+ LOGGER.warn("Unable to preload plugin " + name, cnfe);
+ }
}
map.putIfAbsent(type, types);
}
Index: osgi/core-osgi-reduced/pom.xml
===================================================================
--- osgi/core-osgi-reduced/pom.xml (revision 1505664)
+++ osgi/core-osgi-reduced/pom.xml (working copy)
@@ -38,6 +38,21 @@
org.apache.logging.log4j
log4j-core
+
+ com.fasterxml.jackson.core
+ jackson-core
+ true
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ true
+
+
+ org.osgi
+ core
+ provided
+
@@ -54,7 +69,6 @@
true
- false
<_nouses>true
@@ -67,13 +81,29 @@
!${project.parent.groupId}.core.appender.db.nosql.*,
!${project.parent.groupId}.core.async.*,
!${project.parent.groupId}.core.net.*,
+ !${project.parent.groupId}.core.web.*,
${project.parent.groupId}.core.*
${osgi.private}
- ${osgi.import}
+
+ ${project.parent.groupId}.core.net;resolution:=optional,
+ ${osgi.import}
+
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
+
+ @log4j-core-${project.version}.jar!/Log4j-V2.0.xsd,
+ @log4j-core-${project.version}.jar!/Log4j-events.dtd,
+ @log4j-core-${project.version}.jar!/Log4j-events.xsd,
+ @log4j-core-${project.version}.jar!/META-INF/DEPENDENCIES,
+ @log4j-core-${project.version}.jar!/META-INF/LICENSE,
+ @log4j-core-${project.version}.jar!/META-INF/log4j-provider.properties,
+ @log4j-core-${project.version}.jar!/META-INF/NOTICE,
+ @log4j-core-${project.version}.jar!/org/apache/logging/log4j/core/net/Advertiser.class,
+ @log4j-core-${project.version}.jar!/org/apache/logging/log4j/core/net/Facility.class,
+ @log4j-core-${project.version}.jar!/org/apache/logging/log4j/core/net/Priority.class
+
Index: pom.xml
===================================================================
--- pom.xml (revision 1505664)
+++ pom.xml (working copy)
@@ -157,6 +157,8 @@
1.6
Site Documentation
+ 3.1.0
+ 1.6.0
@@ -382,7 +384,7 @@
org.apache.geronimo.specs
geronimo-jms_1.1_spec
- 1.0
+ 1.1.1
org.mockejb
@@ -442,6 +444,37 @@
lightcouch
0.0.5
+
+
+ org.ops4j.pax.exam
+ pax-exam-container-forked
+ ${pax.exam.version}
+ test
+
+
+ org.ops4j.pax.exam
+ pax-exam-junit4
+ ${pax.exam.version}
+ test
+
+
+ org.ops4j.pax.exam
+ pax-exam-link-mvn
+ ${pax.exam.version}
+ test
+
+
+ org.ops4j.pax.url
+ pax-url-aether
+ ${pax.url.version}
+ test
+
+
+ org.apache.felix
+ org.apache.felix.framework
+ 4.2.1
+ test
+
@@ -612,7 +645,7 @@
true
- true
+ false
target/osgi
Index: osgi/core-osgi-test/pom.xml
===================================================================
--- osgi/core-osgi-test/pom.xml (revision 0)
+++ osgi/core-osgi-test/pom.xml (working copy)
@@ -0,0 +1,101 @@
+
+
+
+ 4.0.0
+
+ org.apache.logging.log4j
+ log4j
+ 2.0-beta9-SNAPSHOT
+ ../../
+
+ org.apache.logging.log4j.osgi
+ log4j-core-osgi-test
+ Apache Log4J Core OSGi Tests
+ Apache Log4J Implementation Tests for OSGi.
+
+ ${basedir}/../..
+ Core Documentation
+ /core
+
+
+
+ org.apache.logging.log4j
+ log4j-api
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+ org.apache.logging.log4j.osgi
+ log4j-core-osgi-reduced
+ ${project.version}
+
+
+ org.ops4j.pax.exam
+ pax-exam-container-forked
+
+
+ org.ops4j.pax.exam
+ pax-exam-junit4
+
+
+ org.ops4j.pax.exam
+ pax-exam-link-mvn
+
+
+ org.ops4j.pax.url
+ pax-url-aether
+
+
+ org.apache.felix
+ org.apache.felix.framework
+
+
+
+
+
+ yourkit
+
+
+ /Applications/YourKit_Java_Profiler_8.0.17.app
+
+
+
+ com.yourkit
+ yjp-controller-api-redist
+ 8.0.17
+ system
+ ${yourkit.home}/lib/yjp-controller-api-redist.jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ -agentpath:"${yourkit.home}/bin/mac/libyjpagent.jnilib"
+
+
+
+
+
+
+
+
Index: osgi/core-osgi-test/pom.xml
===================================================================
--- osgi/core-osgi-test/pom.xml (revision 0)
+++ osgi/core-osgi-test/pom.xml (working copy)
Property changes on: osgi/core-osgi-test/pom.xml
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
Index: osgi/core-osgi-jpa/pom.xml
===================================================================
--- osgi/core-osgi-jpa/pom.xml (revision 1505664)
+++ osgi/core-osgi-jpa/pom.xml (working copy)
@@ -38,6 +38,18 @@
org.apache.logging.log4j
log4j-core
+
+ org.eclipse.persistence
+ javax.persistence
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
@@ -54,7 +66,6 @@
true
- false
<_nouses>true
@@ -68,7 +79,7 @@
${osgi.import}
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
Index: osgi/core-osgi-nosql-couch/pom.xml
===================================================================
--- osgi/core-osgi-nosql-couch/pom.xml (revision 1505664)
+++ osgi/core-osgi-nosql-couch/pom.xml (working copy)
@@ -38,6 +38,10 @@
org.apache.logging.log4j
log4j-core
+
+ org.lightcouch
+ lightcouch
+
@@ -54,7 +58,6 @@
true
- false
<_nouses>true
@@ -68,7 +71,7 @@
${osgi.import}
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
Index: osgi/core-osgi-async/pom.xml
===================================================================
--- osgi/core-osgi-async/pom.xml (revision 1505664)
+++ osgi/core-osgi-async/pom.xml (working copy)
@@ -38,6 +38,10 @@
org.apache.logging.log4j
log4j-core
+
+ com.lmax
+ disruptor
+
@@ -54,7 +58,6 @@
true
- false
<_nouses>true
@@ -68,7 +71,7 @@
${osgi.import}
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
Index: osgi/core-osgi-web/pom.xml
===================================================================
--- osgi/core-osgi-web/pom.xml (revision 0)
+++ osgi/core-osgi-web/pom.xml (working copy)
@@ -0,0 +1,129 @@
+
+
+
+ 4.0.0
+
+ org.apache.logging.log4j
+ log4j
+ 2.0-beta9-SNAPSHOT
+ ../../
+
+ org.apache.logging.log4j.osgi
+ log4j-core-osgi-web
+ bundle
+ Apache Log4J Core OSGi Web
+ Apache Log4J Implementation.
+
+ ${basedir}/../..
+ Core Documentation
+ /core
+
+
+
+ org.apache.logging.log4j
+ log4j-core
+
+
+
+
+
+ org.apache.felix
+ maven-bundle-plugin
+ true
+
+
+
+ true
+
+
+
+ <_nouses>true
+
+ <_removeheaders>JAVA_1_3_HOME,JAVA_1_4_HOME,JAVA_1_5_HOME,JAVA_1_6_HOME,JAVA_1_7_HOME
+ ${osgi.symbolicName}
+
+ ${project.parent.groupId}.core.web
+
+ ${osgi.private}
+ javax.servlet;version="[2.5,3)",
+ ${osgi.import}
+
+ ${osgi.dynamicImport}
+ ${project.url}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
+
+
+
+
+ generate-sources
+
+ cleanVersions
+
+
+
+ ${project.version}
+
+
+
+
+ bundle-manifest
+ process-classes
+
+ manifest
+
+
+
+
+
+
+
+
+
+ yourkit
+
+
+ /Applications/YourKit_Java_Profiler_8.0.17.app
+
+
+
+ com.yourkit
+ yjp-controller-api-redist
+ 8.0.17
+ system
+ ${yourkit.home}/lib/yjp-controller-api-redist.jar
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ -agentpath:"${yourkit.home}/bin/mac/libyjpagent.jnilib"
+
+
+
+
+
+
+
+
Index: osgi/core-osgi-web/pom.xml
===================================================================
--- osgi/core-osgi-web/pom.xml (revision 0)
+++ osgi/core-osgi-web/pom.xml (working copy)
Property changes on: osgi/core-osgi-web/pom.xml
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
Index: osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java
===================================================================
--- osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java (revision 0)
+++ osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java (working copy)
@@ -0,0 +1,78 @@
+package org.apache.logging.log4j.core.osgi.tests;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Layout;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.helpers.Constants;
+import org.apache.logging.log4j.core.layout.PatternLayout;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerMethod;
+
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerMethod.class)
+public class OSGiSniffTest {
+
+ @Configuration
+ public Option[] configCore() {
+
+ /* Install log4j into the OSGi framework */
+ return options(
+ mavenBundle("org.apache.logging.log4j", "log4j-core").noStart(),
+ mavenBundle("org.apache.logging.log4j", "log4j-api"),
+ junitBundles()
+ );
+ }
+
+ @Configuration
+ public Option[] configCoreOSGiReduced() {
+
+ /* Install log4j into the OSGi framework */
+ return options(
+ mavenBundle("org.apache.logging.log4j.osgi", "log4j-core-osgi-reduced").noStart(),
+ mavenBundle("org.apache.logging.log4j", "log4j-api"),
+ junitBundles()
+ );
+ }
+
+ @Test
+ public void testLoggingInOSGi() {
+
+ final Layout layout = PatternLayout.createLayout(null, null, null, null, null);
+ final InMemoryAppender app = new InMemoryAppender("test", layout, null, false);
+
+ System.out.println(LogManager.getContext().getClass().getName());
+
+ Logger logger = (Logger) LogManager.getLogger();
+
+ logger.addAppender(app);
+
+ app.start();
+ assertTrue("Appender did not start", app.isStarted());
+
+ logger.setLevel(Level.INFO);
+ logger.log(Level.INFO, "Test");
+ final String msg = app.toString();
+
+ assertNotNull("No message", msg);
+ assertTrue("Incorrect message: " + msg , msg.endsWith("Test" + Constants.LINE_SEP));
+
+ app.stop();
+ assertFalse("Appender did not stop", app.isStarted());
+
+ logger.removeAppender(app);
+ }
+
+}
\ No newline at end of file
Index: osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java
===================================================================
--- osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java (revision 0)
+++ osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java (working copy)
Property changes on: osgi/core-osgi-test/src/test/java/org/apache/logging/log4j/core/osgi/tests/OSGiSniffTest.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
Index: osgi/core-osgi-nosql-mongo/pom.xml
===================================================================
--- osgi/core-osgi-nosql-mongo/pom.xml (revision 1505664)
+++ osgi/core-osgi-nosql-mongo/pom.xml (working copy)
@@ -38,6 +38,10 @@
org.apache.logging.log4j
log4j-core
+
+ org.mongodb
+ mongo-java-driver
+
@@ -54,7 +58,6 @@
true
- false
<_nouses>true
@@ -68,7 +71,7 @@
${osgi.import}
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
Index: core/pom.xml
===================================================================
--- core/pom.xml (revision 1505664)
+++ core/pom.xml (working copy)
@@ -203,7 +203,6 @@
true
- true
target/osgi
@@ -213,10 +212,13 @@
${osgi.symbolicName}
${osgi.export}
${osgi.private}
- ${osgi.import}
+
+ javax.servlet;version="[2.5,3)";resolution:=optional,
+ ${osgi.import}
+
${osgi.dynamicImport}
${project.url}
- org.apache.commons.log4j-api;bundle-version=${project.version.osgi}
+ org.apache.logging.log4j-api;bundle-version="[${project.version.osgi},${project.version.osgi}]"
Index: api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java
===================================================================
--- api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java (revision 1505664)
+++ api/src/main/java/org/apache/logging/log4j/util/ProviderUtil.java (working copy)
@@ -97,6 +97,30 @@
}
if (cl == null) {
cl = ProviderUtil.class.getClassLoader();
+ } else {
+ // If the ThreadContextClassLoader can't see the Class/Resource we need
+ // then we should fall back to the ClassLoader that loaded Log4J
+ cl = new ClassLoader(cl) {
+
+ ClassLoader log4JClassLoader = ProviderUtil.class.getClassLoader();
+
+ @Override
+ protected Class> findClass(String name)
+ throws ClassNotFoundException {
+ return log4JClassLoader.loadClass(name);
+ }
+
+ @Override
+ protected URL findResource(String name) {
+ return log4JClassLoader.getResource(name);
+ }
+
+ @Override
+ protected Enumeration findResources(String name)
+ throws IOException {
+ return log4JClassLoader.getResources(name);
+ }
+ };
}
return cl;