Roc*_*oom 5 java logging spring logback maven
如果我通过添加这样的 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>
Run Code Online (Sandbox Code Playgroud)
并排除 commons-logging 依赖项,然后我进入日志文件,除了应用程序日志之外,还有一些 spring 事件信息级别,例如:
[RMI TCP Connection(4)-127.0.0.1][org.springframework.web.context.ContextLoader] - Root WebApplicationContext: initialization started
Run Code Online (Sandbox Code Playgroud)
如果我在没有 jcl-over-slf4j 的情况下添加依赖项,并且没有在 pom.xml 中排除 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>
Run Code Online (Sandbox Code Playgroud)
据我了解,发生这种情况是因为当我不使用 JCL-bridge 时,logback 无法捕获或翻译 JCL spring 内部日志。请纠正我,如果我错了。
我可以配置 logback.xml 以在没有 JCL-bridge 的情况下获取标准 spring 日志事件吗?
检查他们的文档,因为它是一个很好的信息来源,有很多示例。\n回到你的问题:\nSpring 和 JCL:
\n\n\nSpring 中的强制日志记录依赖项是 Jakarta Commons\nLogging API (JCL)。我们针对 JCL 进行编译,并且还使 JCL Log\n对象对于扩展 Spring 框架的类可见。\xe2\x80\x99s\n对于用户来说很重要的是,所有版本的 Spring 都使用相同的日志记录\n库:迁移很容易,因为即使对于扩展 Spring 的应用程序,\n也保留了向后兼容性。我们这样做的方式\n是为了使之一Spring 中的模块显式依赖于commons-logging(JCL 的规范实现),然后让所有其他模块在编译时都依赖于它。例如,如果您正在使用 Maven,并且想知道从哪里获得了对 commons-logging 的依赖,那么它来自 Spring,特别是来自名为 spring-core 的中央模块。
\n
Logback 配置,这里有一点很好:
\n\n\nSLF4J 用户中更常见的选择是直接绑定到 Logback,它使用更少的步骤并生成更少的依赖项。这\n删除了额外的绑定步骤,因为Logback 直接实现了 SLF4J\n,因此您只需要依赖两个库而不是四个\n(jcl-over-slf4j 和 logback)。如果您这样做,您可能还需要从其他外部依赖项(不是 Spring)中排除 slf4j-api 依赖项,因为您只需要在类路径上使用该 API 的一个版本。
\n
归档时间: |
|
查看次数: |
5885 次 |
最近记录: |