In Spring Boot, Tomcat is on the same classpath as everything else I think as it's embedded.
On 14 January 2017 at 20:30, Apache <ralph.go...@dslextreme.com> wrote: > I have run into problems with log4j-jul. It does not work well in Tomcat > as the jar really has to be in Tomcat’s classpath, which means all the > other log4j jars also need to be. It also has to initialize before Tomcat > starts using java.util.logging, which is a bit of a pain. I don’t think > there is any decent way to improve it to fix the problems you note. I just > try to avoid everything that uses jul for logging. > > Ralph > > On Jan 14, 2017, at 4:43 PM, Matt Sicker <boa...@gmail.com> wrote: > > 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/co > mmit/3619ca0c > Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/tr > ee/3619ca0c > Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j-boot/di > ff/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/bl > ob/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/bl > ob/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/bl > ob/3619ca0c/spring/src/main/java/org/apache/logging/log4j/bo > ot/spring/AutoConfiguringLoggerContextFactory.java > ---------------------------------------------------------------------- > diff --git a/spring/src/main/java/org/apache/logging/log4j/boot/spring/ > AutoConfiguringLoggerContextFactory.java b/spring/src/main/java/org/apa > che/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/bl > ob/3619ca0c/spring/src/main/java/org/apache/logging/log4j/bo > ot/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.get > DeclaredMethod("isActive"); > + ReflectionUtil.makeAccessible(factoryIsActive); > + factorySupportedTypes = ConfigurationFactory.class.get > DeclaredMethod("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 = determineStandardConfigLocatio > ns(); > + } > + > + 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(ConfigurationFac > tory.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().as > Subclass(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/defa > ult/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/bl > ob/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/bl > ob/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_CONVER > SION_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/bl > ob/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/bl > ob/3619ca0c/spring/src/test/java/org/apache/logging/log4j/bo > ot/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> > > > -- Matt Sicker <boa...@gmail.com>