如何让Spring启动使用log4j.xml配置文件?

时间:2014-04-25 14:54:15

标签: logging log4j spring-boot

我有一个简单的Spring Boot应用程序,它构建为一个jar文件。我在src / main / resources / log4j.xml中有一个log4j.xml文件,看起来像这样(来自log4j docs的基本样本文件):

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <!-- Pattern to output the caller's file name and line number -->
            <param name="ConversionPattern" value="%5p [%t] (%F:%L) - %m%n"/>
        </layout>
    </appender>
    <appender name="R" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="/tmp/logs/sample.log"/>
        <param name="MaxFileSize" value="100KB"/>
        <!-- Keep one backup file -->
        <param name="MaxBackupIndex" value="1"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p %t %c - %m%n"/>
        </layout>
    </appender>
    <root>
        <priority value="debug"/>
        <appender-ref ref="stdout"/>
        <appender-ref ref="R"/>
    </root>
</log4j:configuration>

记录只会进入控制台(/ tmp /logs / sample.log永远不会被创建),因为它忽略了log4j.xml文件。

该文件显示在jar的根目录中,我认为这是正确的。选择此日志记录配置还需要做些什么?

如果它有任何区别,该项目使用的是Gradle,而不是Maven。

2 个答案:

答案 0 :(得分:7)

这取决于您如何设置类路径。 log4j是否在你的类路径上绑定到slf4j(如果你只使用vanilla spring-boot-starter那么它会胜出?)这是一个spring-boot-starter-log4j和一个显示如何使用它的sample(在Maven中,但Gradle具有相同的功能)。

如果我是你,我只是使用logback。

N.B。 Spring Boot 1.4不支持log4j(仅限log4j2)。但是在同一个地方有一个样本。

答案 1 :(得分:3)

如果我们使用Spring-boot并同时尝试使用log4j显式使用日志记录,则构建日志记录中的spring-boot优先级更高,因此永远不会读取log4j配置。如上所述,在这种情况下,最好的解决方案是从以下两个spring-boot依赖项中排除日志记录。

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>