So would it be a decent idea to add a similar extended LoggerContextFactory
to log4j-jul so it auto sets up in other environments? I find that
specifying the system property at the right time in code is very difficult
to get right, and the reason this worked well enough with spring boot was
because of the main class used in your main method calling
LogFactory.getLogger() on initialization.

---------- Forwarded message ----------
From: <mattsic...@apache.org>
Date: 14 January 2017 at 17:40
Subject: logging-log4j-boot git commit: Add log4j-boot-spring module
To: comm...@logging.apache.org


Repository: logging-log4j-boot
Updated Branches:
  refs/heads/master 35f38d944 -> 3619ca0c2


Add log4j-boot-spring module

This is a spring-boot-starter module for bootstrapping Log4j
accordingly with default config files inspired by
spring-boot-starter-log4j2.


Project: http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
commit/3619ca0c
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
tree/3619ca0c
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
diff/3619ca0c

Branch: refs/heads/master
Commit: 3619ca0c2abd62f3ef18369987fa376f562a8dac
Parents: 35f38d9
Author: Matt Sicker <boa...@gmail.com>
Authored: Sat Jan 14 17:39:12 2017 -0600
Committer: Matt Sicker <boa...@gmail.com>
Committed: Sat Jan 14 17:39:12 2017 -0600

----------------------------------------------------------------------
 pom.xml                                         |   4 +
 spring/pom.xml                                  |  66 +++++++
 .../AutoConfiguringLoggerContextFactory.java    |  34 ++++
 .../log4j/boot/spring/Log4jLoggingSystem.java   | 191 +++++++++++++++++++
 .../META-INF/log4j/default/log4j2-file.xml      |  57 ++++++
 .../resources/META-INF/log4j/default/log4j2.xml |  50 +++++
 .../main/resources/log4j2.component.properties  |  20 ++
 .../boot/spring/LoggingInitializerTest.java     |  62 ++++++
 8 files changed, 484 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 415da22..ea5cd77 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,6 +43,8 @@
   <url>https://logging.apache.org/log4j/boot/</url>

   <properties>
+    <maven.compiler.source>1.7</maven.compiler.source>
+    <maven.compiler.target>1.7</maven.compiler.target>
     <log4jVersion>2.7.1-SNAPSHOT</log4jVersion>
     <slf4jVersion>1.7.22</slf4jVersion>
     <activemqVersion>5.14.1</activemqVersion>
@@ -62,6 +64,7 @@
     <logbackVersion>1.1.8</logbackVersion>
     <kafkaVersion>0.10.1.1</kafkaVersion>
     <mongodbVersion>3.4.1</mongodbVersion>
+    <springbootVersion>1.4.3.RELEASE</springbootVersion>
   </properties>

   <modules>
@@ -90,6 +93,7 @@
     <module>layout/xml</module>
     <module>layout/yaml</module>
     <module>script/groovy</module>
+    <module>spring</module>
   </modules>

   <scm>

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/pom.xml
----------------------------------------------------------------------
diff --git a/spring/pom.xml b/spring/pom.xml
new file mode 100644
index 0000000..5985328
--- /dev/null
+++ b/spring/pom.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>log4j-boot-parent</artifactId>
+    <groupId>org.apache.logging.log4j.boot</groupId>
+    <version>1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>log4j-boot-spring</artifactId>
+  <name>Log4j Spring Boot Starter</name>
+  <description>
+    Log4j Boot module for integration with Spring Boot. This module can be
used as a complete replacement for
+    spring-boot-starter-logging or spring-boot-starter-log4j2.
+  </description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.logging.log4j.boot</groupId>
+      <artifactId>log4j-boot-core</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j.boot</groupId>
+      <artifactId>log4j-boot-compat</artifactId>
+      <version>1.0-SNAPSHOT</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot</artifactId>
+      <version>${springbootVersion}</version>
+      <scope>compile</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-test</artifactId>
+      <version>${springbootVersion}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+</project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/src/main/java/org/apache/logging/log4j/boot/spring/
AutoConfiguringLoggerContextFactory.java
----------------------------------------------------------------------
diff --git a/spring/src/main/java/org/apache/logging/log4j/boot/spring/
AutoConfiguringLoggerContextFactory.java b/spring/src/main/java/org/
apache/logging/log4j/boot/spring/AutoConfiguringLoggerContextFactory.java
new file mode 100644
index 0000000..706f1db
--- /dev/null
+++ b/spring/src/main/java/org/apache/logging/log4j/boot/spring/
AutoConfiguringLoggerContextFactory.java
@@ -0,0 +1,34 @@
+/*
+ * 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.boot.spring;
+
+import org.apache.logging.log4j.core.impl.Log4jContextFactory;
+import org.springframework.boot.logging.LoggingSystem;
+
+/**
+ * LoggerContextFactory extension to automatically register logging
systems.
+ */
+public class AutoConfiguringLoggerContextFactory extends
Log4jContextFactory {
+
+    static {
+        System.setProperty("java.util.logging.manager",
"org.apache.logging.log4j.jul.LogManager");
+        System.setProperty(LoggingSystem.SYSTEM_PROPERTY,
Log4jLoggingSystem.class.getName());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/src/main/java/org/apache/logging/log4j/boot/spring/
Log4jLoggingSystem.java
----------------------------------------------------------------------
diff --git 
a/spring/src/main/java/org/apache/logging/log4j/boot/spring/Log4jLoggingSystem.java
b/spring/src/main/java/org/apache/logging/log4j/boot/
spring/Log4jLoggingSystem.java
new file mode 100644
index 0000000..e0bad83
--- /dev/null
+++ b/spring/src/main/java/org/apache/logging/log4j/boot/
spring/Log4jLoggingSystem.java
@@ -0,0 +1,191 @@
+/*
+ * 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.boot.spring;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.ConfigurationFactory;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
+import org.apache.logging.log4j.core.config.plugins.util.PluginType;
+import org.apache.logging.log4j.core.util.NetUtils;
+import org.apache.logging.log4j.core.util.ReflectionUtil;
+import org.apache.logging.log4j.core.util.Throwables;
+import org.apache.logging.log4j.util.Strings;
+import org.springframework.boot.logging.AbstractLoggingSystem;
+import org.springframework.boot.logging.LogFile;
+import org.springframework.boot.logging.LogLevel;
+import org.springframework.boot.logging.LoggingInitializationContext;
+
+import java.lang.reflect.Method;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * Spring Boot LoggingSystem for integration with Log4j 2.
+ */
+public class Log4jLoggingSystem extends AbstractLoggingSystem {
+
+    static {
+        Method factoryIsActive;
+        Method factorySupportedTypes;
+        try {
+            factoryIsActive = ConfigurationFactory.class.
getDeclaredMethod("isActive");
+            ReflectionUtil.makeAccessible(factoryIsActive);
+            factorySupportedTypes = ConfigurationFactory.class.
getDeclaredMethod("getSupportedTypes");
+            ReflectionUtil.makeAccessible(factorySupportedTypes);
+        } catch (final NoSuchMethodException e) {
+            Throwables.rethrow(e);
+            // unreachable; make the compiler happy
+            factoryIsActive = null;
+            factorySupportedTypes = null;
+        }
+        FACTORY_IS_ACTIVE = factoryIsActive;
+        FACTORY_SUPPORTED_TYPES = factorySupportedTypes;
+    }
+
+    private static final Method FACTORY_IS_ACTIVE;
+    private static final Method FACTORY_SUPPORTED_TYPES;
+
+    private final String[] standardConfigLocations;
+    private LoggerContext loggerContext;
+
+    public Log4jLoggingSystem(final ClassLoader classLoader) {
+        super(classLoader);
+        this.standardConfigLocations = determineStandardConfigLocations();
+    }
+
+    private static String[] determineStandardConfigLocations() {
+        final List<String> locations = new ArrayList<>();
+        for (final ConfigurationFactory factory : findFactories()) {
+            for (final String extension : getSupportedTypes(factory)) {
+                if ("*".equals(extension)) {
+                    continue;
+                }
+                locations.add("log4j2-test" + extension);
+                locations.add("log4j2" + extension);
+            }
+        }
+        return locations.toArray(new String[0]);
+    }
+
+    private static Collection<ConfigurationFactory> findFactories() {
+        final PluginManager manager = new PluginManager(
ConfigurationFactory.CATEGORY);
+        manager.collectPlugins();
+        final Collection<ConfigurationFactory> factories = new
ArrayList<>();
+        for (final PluginType<?> type : manager.getPlugins().values()) {
+            final ConfigurationFactory factory = tryCreateFactory(type);
+            if (factory != null) {
+                factories.add(factory);
+            }
+        }
+        return factories;
+    }
+
+    private static ConfigurationFactory tryCreateFactory(final
PluginType<?> pluginType) {
+        try {
+            return pluginType.getPluginClass().asSubclass(
ConfigurationFactory.class).newInstance();
+        } catch (final Exception ignored) {
+            return null;
+        }
+    }
+
+    private static String[] getSupportedTypes(final ConfigurationFactory
factory) {
+        try {
+            if ((boolean) FACTORY_IS_ACTIVE.invoke(factory)) {
+                return (String[]) FACTORY_SUPPORTED_TYPES.invoke(factory);
+            }
+        } catch (final Exception ignored) {
+        }
+        return new String[0];
+    }
+
+    @Override
+    protected String[] getStandardConfigLocations() {
+        return standardConfigLocations;
+    }
+
+    @Override
+    protected void loadDefaults(final LoggingInitializationContext
context, final LogFile file) {
+        final String configFileName = "classpath:META-INF/log4j/
default/log4j2"
+            + ((file == null) ? Strings.EMPTY : "-file")
+            + ".xml";
+        loadConfiguration(context, configFileName, file);
+    }
+
+    @Override
+    protected void loadConfiguration(final LoggingInitializationContext
context, final String location,
+                                     final LogFile file) {
+        final URI configLocation = NetUtils.toURI(location);
+        loggerContext = (LoggerContext) LogManager.getContext(
+            getClassLoader(), false, this, configLocation);
+    }
+
+    @Override
+    protected void reinitialize(final LoggingInitializationContext
context) {
+        if (loggerContext != null) {
+            loggerContext.reconfigure();
+        }
+    }
+
+    @Override
+    public void cleanUp() {
+        if (loggerContext != null) {
+            loggerContext.setExternalContext(null);
+            loggerContext.terminate();
+        }
+    }
+
+    @Override
+    public void setLogLevel(final String loggerName, final LogLevel
logLevel) {
+        if (loggerContext != null) {
+            final Logger logger = loggerContext.getLogger(loggerName);
+            final LoggerConfig config = logger.get();
+            final Level level = convert(logLevel);
+            if (config.getLevel() != level) {
+                config.setLevel(level);
+            }
+        }
+    }
+
+    private static Level convert(final LogLevel logLevel) {
+        switch (logLevel) {
+            case FATAL:
+                return Level.FATAL;
+            case ERROR:
+                return Level.ERROR;
+            case WARN:
+                return Level.WARN;
+            case INFO:
+                return Level.INFO;
+            case DEBUG:
+                return Level.DEBUG;
+            case TRACE:
+                return Level.TRACE;
+            case OFF:
+                return Level.OFF;
+            default:
+                return Level.toLevel(logLevel.name());
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/src/main/resources/META-INF/log4j/
default/log4j2-file.xml
----------------------------------------------------------------------
diff --git a/spring/src/main/resources/META-INF/log4j/default/log4j2-file.xml
b/spring/src/main/resources/META-INF/log4j/default/log4j2-file.xml
new file mode 100644
index 0000000..9880ceb
--- /dev/null
+++ b/spring/src/main/resources/META-INF/log4j/default/log4j2-file.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<Configuration status="WARN">
+       <Properties>
+               <Property name="PID">????</Property>
+               <Property name="LOG_EXCEPTION_CONVERSION_WORD">%xEx</
Property>
+               <Property name="LOG_LEVEL_PATTERN">%5p</Property>
+               <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS}
${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} :
%m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}</Property>
+       </Properties>
+       <Appenders>
+               <Console name="Console" target="SYSTEM_OUT" follow="true">
+                       <PatternLayout pattern="${LOG_PATTERN}" />
+               </Console>
+               <RollingFile name="File" fileName="${sys:LOG_FILE}"
filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
+                       <PatternLayout pattern="${LOG_PATTERN}"/>
+                       <Policies>
+                               <SizeBasedTriggeringPolicy size="10 MB" />
+                       </Policies>
+               </RollingFile>
+       </Appenders>
+       <Loggers>
+               <Logger name="org.apache.catalina.startup.DigesterFactory"
level="error" />
+               <Logger name="org.apache.catalina.util.LifecycleBase"
level="error" />
+               <Logger name="org.apache.coyote.http11.Http11NioProtocol"
level="warn" />
+               <logger name="org.apache.sshd.common.util.SecurityUtils"
level="warn"/>
+               <Logger name="org.apache.tomcat.util.net.NioSelectorPool"
level="warn" />
+               <Logger name="org.crsh.plugin" level="warn" />
+               <logger name="org.crsh.ssh" level="warn"/>
+               <Logger
name="org.eclipse.jetty.util.component.AbstractLifeCycle"
level="error" />
+               <Logger name="org.hibernate.validator.internal.util.Version"
level="warn" />
+               <logger name="org.springframework.
boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
+               <logger name="org.springframework.boot.actuate.endpoint.jmx"
level="warn"/>
+               <logger name="org.thymeleaf" level="warn"/>
+               <Root level="info">
+                       <AppenderRef ref="Console" />
+                       <AppenderRef ref="File" />
+               </Root>
+       </Loggers>
+</Configuration>

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/src/main/resources/META-INF/log4j/default/log4j2.xml
----------------------------------------------------------------------
diff --git a/spring/src/main/resources/META-INF/log4j/default/log4j2.xml
b/spring/src/main/resources/META-INF/log4j/default/log4j2.xml
new file mode 100644
index 0000000..2ede5aa
--- /dev/null
+++ b/spring/src/main/resources/META-INF/log4j/default/log4j2.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<Configuration status="WARN">
+       <Properties>
+               <Property name="PID">????</Property>
+               <Property name="LOG_EXCEPTION_CONVERSION_WORD">%xEx</
Property>
+               <Property name="LOG_LEVEL_PATTERN">%5p</Property>
+               <Property name="LOG_PATTERN">%style{%d{yyyy-MM-dd
HH:mm:ss.SSS}}{dim} %highlight{${LOG_LEVEL_PATTERN}}
%style{${sys:PID}}{magenta} %style{---}{dim} %style{[%15.15t]}{dim}
%style{%-40.40c{1.}}{cyan} %style{:}{faint} %m%n${sys:LOG_EXCEPTION_
CONVERSION_WORD}</Property>
+       </Properties>
+       <Appenders>
+               <Console name="Console" target="SYSTEM_OUT" follow="true">
+                       <PatternLayout pattern="${LOG_PATTERN}" />
+               </Console>
+       </Appenders>
+       <Loggers>
+               <Logger name="org.apache.catalina.startup.DigesterFactory"
level="error" />
+               <Logger name="org.apache.catalina.util.LifecycleBase"
level="error" />
+               <Logger name="org.apache.coyote.http11.Http11NioProtocol"
level="warn" />
+               <logger name="org.apache.sshd.common.util.SecurityUtils"
level="warn"/>
+               <Logger name="org.apache.tomcat.util.net.NioSelectorPool"
level="warn" />
+               <Logger name="org.crsh.plugin" level="warn" />
+               <logger name="org.crsh.ssh" level="warn"/>
+               <Logger
name="org.eclipse.jetty.util.component.AbstractLifeCycle"
level="error" />
+               <Logger name="org.hibernate.validator.internal.util.Version"
level="warn" />
+               <logger name="org.springframework.
boot.actuate.autoconfigure.CrshAutoConfiguration" level="warn"/>
+               <logger name="org.springframework.boot.actuate.endpoint.jmx"
level="warn"/>
+               <logger name="org.thymeleaf" level="warn"/>
+               <Root level="info">
+                       <AppenderRef ref="Console" />
+               </Root>
+       </Loggers>
+</Configuration>

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/src/main/resources/log4j2.component.properties
----------------------------------------------------------------------
diff --git a/spring/src/main/resources/log4j2.component.properties
b/spring/src/main/resources/log4j2.component.properties
new file mode 100644
index 0000000..34d00f4
--- /dev/null
+++ b/spring/src/main/resources/log4j2.component.properties
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+
+log4j2.loggerContextFactory = org.apache.logging.log4j.boot.spring.
AutoConfiguringLoggerContextFactory
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/
blob/3619ca0c/spring/src/test/java/org/apache/logging/log4j/boot/spring/
LoggingInitializerTest.java
----------------------------------------------------------------------
diff --git a/spring/src/test/java/org/apache/logging/log4j/boot/
spring/LoggingInitializerTest.java b/spring/src/test/java/org/
apache/logging/log4j/boot/spring/LoggingInitializerTest.java
new file mode 100644
index 0000000..b7002f3
--- /dev/null
+++ b/spring/src/test/java/org/apache/logging/log4j/boot/
spring/LoggingInitializerTest.java
@@ -0,0 +1,62 @@
+/*
+ * 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.boot.spring;
+
+import org.apache.commons.logging.LogFactory;
+import org.apache.logging.log4j.jcl.LogFactoryImpl;
+import org.apache.logging.slf4j.Log4jLoggerFactory;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.ILoggerFactory;
+import org.slf4j.LoggerFactory;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.util.logging.LogManager;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * Integration test to verify Spring Boot uses the proper logging facades.
+ */
+@RunWith(SpringRunner.class)
+@SpringBootApplication
+@SpringBootTest
+public class LoggingInitializerTest {
+
+    @Test
+    public void testJavaUtilLogManagerSet() throws Throwable {
+        LogManager logManager = LogManager.getLogManager();
+        assertThat(logManager).isInstanceOf(org.apache.
logging.log4j.jul.LogManager.class);
+    }
+
+    @Test
+    public void testCommonsLogFactorySet() throws Throwable {
+        LogFactory logFactory = LogFactory.getFactory();
+        assertThat(logFactory).isInstanceOf(LogFactoryImpl.class);
+    }
+
+    @Test
+    public void testSlf4jFactorySet() throws Exception {
+        ILoggerFactory factory = LoggerFactory.getILoggerFactory();
+        assertThat(factory).isInstanceOf(Log4jLoggerFactory.class);
+    }
+}
\ No newline at end of file




-- 
Matt Sicker <boa...@gmail.com>

Reply via email to