AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出
概述
在使用Atomikos为ActiveMQ提供JTA支持时,Atomikos在控制台打印了繁琐的日志。这里介绍如何控制Atomikos日志输出的粒度。
解决方案
基于以下三个事实:
- Atomikos使用slf4j输出日志
所以,项目里要提供slf4j-api的相关jar包。 - slf4j只是一个抽象层,你还需要绑定到一个实现上
在这里我们使用log4j,那么我们需要引入下面的jar:
[1] slf4j-log4j12:适配器的角色,提供slf4j-api到log4j的转换
[2] log4j:日志实现 - 你可以使用log4j.properties来配置log4j的输出
log4j.logger.com.atomikos=WARN
经过上面三个步骤,我们进行了slf4j —> log4j的绑定,Atomikos最终使用log4j输出日志,我们的log4j配置才有效。
扩展内容
slf4j只是一个抽象层,不是一个真正的日志实现。如果你的日志是基于slf4j api的,那么底层可以切换不同的日志实现。
1.log4j
比如使用log4j的实现,那么你需要引入下述依赖:
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency>
分析依赖关系如下:
1 [INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile # 适配器,将面向slf4j api的日志输出切换到log4j的底层实现 2 [INFO] | +- org.slf4j:slf4j-api:jar:1.7.12:compile # 提供抽象的api 3 [INFO] | \- log4j:log4j:jar:1.2.17:compile # 提供日志实现
我们不需要进行任何配置,会自动进行绑定:slf4j-api —> slf4j-log4j12 —> log4j。这样,我们面向抽象的slf4j编程,如果有切换日志实现的需要,也很方便。
2.slf4j-simple
除了log4j的实现,slf4j-simple的实现,如果使用这个,你的maven依赖可以是:
1 <dependency> 2 <groupId>org.slf4j</groupId> 3 <artifactId>slf4j-simple</artifactId> 4 <version>1.7.12</version> 5 </dependency>
分析依赖关系:
1 [INFO] +- org.slf4j:slf4j-simple:jar:1.7.12:compile # 提供日志实现 2 [INFO] | \- org.slf4j:slf4j-api:jar:1.7.12:compile # 提供抽象的api
这里没有适配器了,应该是因为slf4j-simple本就是面向slf4j-api的实现。
3.不要绑定多个实现
使用slf4j-api并提供一个具体的实现,我们称之为binding。如果系统中有多个绑定(比如同时引入了log4j和slf4j-simple),运行时会自动提示下面的消息:
1 SLF4J: Class path contains multiple SLF4J bindings. 2 SLF4J: Found binding in [jar:file:/C:/Users/lijinlong/.m2/repository/org/slf4j/slf4j-log4j12/1.7.12/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 3 SLF4J: Found binding in [jar:file:/C:/Users/lijinlong/.m2/repository/org/slf4j/slf4j-simple/1.7.12/slf4j-simple-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class] 4 SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 5 SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
你可以选择某一个实现进行绑定,但尽量使用一种实现。
参考目录
- 为什么要使用SLF4J而不是Log4J
理解slf4j和log4j的关系。 - How to set Atomikos to not write to console logs
这里就如何控制Atomikos的日志输出问题进行了讨论。 - Unable to setup Slf4j-->Log4J logging in ATE-3.8.0
这里就如何控制Atomikos的日志输出问题进行了讨论。
本文来自博客园,作者:一尾金鱼,转载请注明原文链接:https://www.cnblogs.com/ywjy/articles/5434835.html