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>

Reply via email to