AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出
2024-08-30 09:11:28
概述
在使用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>
分析依赖关系如下:
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.12:compile # 适配器,将面向slf4j api的日志输出切换到log4j的底层实现
[INFO] | +- org.slf4j:slf4j-api:jar:1.7.12:compile # 提供抽象的api
[INFO] | \- log4j:log4j:jar:1.2.17:compile # 提供日志实现
我们不需要进行任何配置,会自动进行绑定:slf4j-api —> slf4j-log4j12 —> log4j。这样,我们面向抽象的slf4j编程,如果有切换日志实现的需要,也很方便。
2.slf4j-simple
除了log4j的实现,slf4j-simple的实现,如果使用这个,你的maven依赖可以是:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.12</version>
</dependency>
分析依赖关系:
[INFO] +- org.slf4j:slf4j-simple:jar:1.7.12:compile # 提供日志实现
[INFO] | \- org.slf4j:slf4j-api:jar:1.7.12:compile # 提供抽象的api
这里没有适配器了,应该是因为slf4j-simple本就是面向slf4j-api的实现。
3.不要绑定多个实现
使用slf4j-api并提供一个具体的实现,我们称之为binding。如果系统中有多个绑定(比如同时引入了log4j和slf4j-simple),运行时会自动提示下面的消息:
SLF4J: Class path contains multiple SLF4J bindings.
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]
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]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
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的日志输出问题进行了讨论。
最新文章
- cglib动态新增类方法
- Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
- jQuery Easy UI 开发笔记
- Xib的使用与File&#39;Owner总结
- 离线网页制作器(beta1.0)
- rcc
- WPF中的ControlTemplate(控件模板)(转)
- HTML+CSS入门
- 关于CSS的图像放大问题的解决,需要借助jQuery等直接用css3设置
- oracle数据库表空间及归档
- smarty 从配置文件读取变量
- mybatis 总结(1)
- java的classpath路径中加点号 ‘.’ 的作用
- 【Android】activity-alias的使用
- break 和continue在循环中起到的作用
- 转-OWASP CSRFGuard使用细节
- secure CRT常用的查看服务器日志命令
- 20155218 2006-2007-2 《Java程序设计》第5周学习总结
- function &;w(){}
- SGU---103 最短路变形
热门文章
- 编辑器TP
- 终端I/O之波特率函数
- (转)ASP.NET Identity登录原理 - Claims-based认证和OWIN
- AlloyTouch实现下拉刷新
- 在加载模块时出现cannot insert &#39;*.ko&#39;: Device or resource busy错误
- 关于 ArtifactTransferException: Failure to transfer
- Android设置窗口、控件透明度
- putty ssh login linux
- 【Mood-18】github 使用指南
- 【开源项目8】Android开源项目分类汇总【畜生级别】