使用Spring + Logback(slf4j)记录日志且不使用jcl-over-slf4j

6
如果我通过像这样添加maven依赖项将Logback和Slf4j添加到我的Spring MVC(版本4.1.0)项目中:
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>jcl-over-slf4j</artifactId>
                <version>1.7.21</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-api</artifactId>
                <version>1.7.21</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <version>1.1.7</version>
                <scope>runtime</scope>
            </dependency>

如果我排除commons-logging依赖项,那么在日志文件中,除了应用程序日志之外,还会记录一些Spring事件的INFO级别。
[RMI TCP Connection(4)-127.0.0.1][org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initialization started

如果我在pom.xml中添加依赖项但没有添加jcl-over-slf4j,并且没有排除commons-logging,则只会生成应用程序日志。
以下是我的logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOG_HOME" value="logs" />
    <property name="APP_NAME" value="App" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">        
        <encoder>
            <charset>UTF-8</charset>
            <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>            
        </encoder>
    </appender>

    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>${LOG_HOME}/${APP_NAME}.log.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <encoder>
            <charset>UTF-8</charset>
            <pattern>%-5level %d{yyyy-MM-dd HH:mm:ss.SSS} %thread %logger{50} - %msg%n</pattern>                
        </encoder>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>  

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

    <logger name="org.springframework" level="INFO" appender-ref="FILE"/>
</configuration>

据我所知,当我不使用JCL桥接器时,logback无法捕获或翻译JCL spring内部日志。如果我错了,请纠正我。

我能否配置logback.xml以获取没有JCL桥接器的标准spring日志事件?

1个回答

4
请查看他们的文档,因为它是一个信息丰富且有很多示例的好来源。 回到您的问题: Spring和JCL:
在Spring中必须使用的日志记录依赖项是Jakarta Commons Logging API(JCL)。我们编译使用JCL,并且我们还使JCL Log对象对于扩展Spring Framework的类可见。对于用户而言,所有版本的Spring都使用相同的日志记录库非常重要:迁移很容易,因为即使是扩展Spring的应用程序也保留了向后兼容性。我们这样做的方式是使Spring中的一个模块明确地依赖于commons-logging(JCL的规范实现),然后使所有其他模块在编译时依赖于该模块。例如,如果您正在使用Maven并想知道您从何处获得了对commons-logging的依赖关系,则是来自Spring,特别是来自称为spring-core的中央模块。
Logback配置,这里是一个好的观点:
SLF4J用户更常见的选择是直接绑定到Logback,这使用较少的步骤并生成较少的依赖项。这消除了额外的绑定步骤,因为Logback直接实现了SLF4J,所以您只需要依赖于两个库而不是四个(jcl-over-slf4j和Logback)。如果您这样做,还可能需要从其他外部依赖项(而不是Spring)中排除slf4j-api依赖项,因为您只想在类路径上使用一个版本的该API。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接