概述


在使用Atomikos为ActiveMQ提供JTA支持时,Atomikos在控制台打印了繁琐的日志。这里介绍如何控制Atomikos日志输出的粒度。

解决方案


基于以下三个事实:
  1. Atomikos使用slf4j输出日志
    所以,项目里要提供slf4j-api的相关jar包。
  2. slf4j只是一个抽象层,你还需要绑定到一个实现上
    在这里我们使用log4j,那么我们需要引入下面的jar:
    [1] slf4j-log4j12:适配器的角色,提供slf4j-api到log4j的转换
    [2] log4j:日志实现
  3. 你可以使用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]

你可以选择某一个实现进行绑定,但尽量使用一种实现。

参考目录


  1. 为什么要使用SLF4J而不是Log4J
    理解slf4j和log4j的关系。
  2. How to set Atomikos to not write to console logs
    这里就如何控制Atomikos的日志输出问题进行了讨论。
  3. Unable to setup Slf4j-->Log4J logging in ATE-3.8.0
    这里就如何控制Atomikos的日志输出问题进行了讨论。

最新文章

  1. cglib动态新增类方法
  2. Winform开发框架之客户关系管理系统(CRM)的开发总结系列4-Tab控件页面的动态加载
  3. jQuery Easy UI 开发笔记
  4. Xib的使用与File&#39;Owner总结
  5. 离线网页制作器(beta1.0)
  6. rcc
  7. WPF中的ControlTemplate(控件模板)(转)
  8. HTML+CSS入门
  9. 关于CSS的图像放大问题的解决,需要借助jQuery等直接用css3设置
  10. oracle数据库表空间及归档
  11. smarty 从配置文件读取变量
  12. mybatis 总结(1)
  13. java的classpath路径中加点号 ‘.’ 的作用
  14. 【Android】activity-alias的使用
  15. break 和continue在循环中起到的作用
  16. 转-OWASP CSRFGuard使用细节
  17. secure CRT常用的查看服务器日志命令
  18. 20155218 2006-2007-2 《Java程序设计》第5周学习总结
  19. function &amp;w(){}
  20. SGU---103 最短路变形

热门文章

  1. 编辑器TP
  2. 终端I/O之波特率函数
  3. (转)ASP.NET Identity登录原理 - Claims-based认证和OWIN
  4. AlloyTouch实现下拉刷新
  5. 在加载模块时出现cannot insert &#39;*.ko&#39;: Device or resource busy错误
  6. 关于 ArtifactTransferException: Failure to transfer
  7. Android设置窗口、控件透明度
  8. putty ssh login linux
  9. 【Mood-18】github 使用指南
  10. 【开源项目8】Android开源项目分类汇总【畜生级别】