概述


在使用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的日志输出问题进行了讨论。

AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出的更多相关文章

  1. Java学习笔记 DbUtils数据库查询和log4j日志输出 使用

    DbUtils使用 QueryRunner DbUtils中定义了一个数据库操作类QueryRunner,所有的数据库操作CRUD都是通过此类来完成. 此类是线程安全的 方法名 对应sql语句 exc ...

  2. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

  3. SQL反模式学习笔记19 使用*号,隐式的列

    目标:减少输入 反模式:捷径会让你迷失方向 使用通配符和未命名的列能够达到减少输入的目的,但是这个习惯会带来一些危害. 1.破坏代码重构:增加一列后,使用隐式的Insert插入语句报错: 2.查询中使 ...

  4. golang学习笔记19 用Golang实现以太坊代币转账

    golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...

  5. springmvc学习笔记(19)-RESTful支持

    springmvc学习笔记(19)-RESTful支持 标签: springmvc springmvc学习笔记19-RESTful支持 概念 REST的样例 controller REST方法的前端控 ...

  6. [原创]java WEB学习笔记19:初识MVC 设计模式:查询,删除 练习(理解思想),小结 ,问题

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  7. ‎Cocos2d-x 学习笔记(19) Control Invocation

    [Cocos2d-x 学习笔记 目录链接] 1. 简介 control为其子类提供了touch回调函数,当子类触发EventType相关事件时,会调用相关的回调函数. control对象接收到的事件类 ...

  8. AMQ学习笔记 - 15. 实践方案:基于ActiveMQ的统一日志服务

    概述 以ActiveMQ + Log4j + Spring的技术组合,实现基于消息队列的统一日志服务. 参考:Spring+Log4j+ActiveMQ实现远程记录日志——实战+分析 与参考文章的比较 ...

  9. Java学习笔记(十九)——Java 日志记录 AND log4j

    [前面的话] 学习的进度应该稍微在快一点. Java日志到了必须学习怎么使用的时候了,因为在项目中要进行使用.基础性文章,选择性阅读. [结构] java日志对调试,记录运行,问题定位都起到了很重要的 ...

随机推荐

  1. replace into

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  2. 排版系统Latex傻瓜方式使用(论文排版)

    0. 什么是Latex? LaTEX(英语发音:/ˈleɪtɛk/ lay-tek或英语发音:/ˈlɑːtɛk/ lah-tek,音译"拉泰赫").文字形式写作LaTeX.是一种基 ...

  3. 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较

    1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...

  4. 关于对defer的理解.

    代码 <script defer> function init(){ document.getElementById("div").innerHTML="OK ...

  5. HtmlAgilityPack.dll的使用 获取HTMLid

    简介 本文介绍net处理html页面元素的工具类(HtmlAgilityPack.dll)的使用,用途比较多的应该是例如采集类的功能,采集到的html字符串要怎样处理是一个头痛的问题,如果是截取就太麻 ...

  6. Creating a CSRF protection with Spring 3.x--reference

    reference from:http://info.michael-simons.eu/2012/01/11/creating-a-csrf-protection-with-spring-3-1/ ...

  7. vba用http发送xml所需技术

    1.代理(invoke) CallByName 函数 •执行一个对象的方法,或者设置或返回一个对象的属性. •语法 •CallByName(object, procname, calltype,[ar ...

  8. Specialized Four-Digit Numbers

    Problem Description Find and list all four-digit numbers in decimal notation that have the property ...

  9. java 输入输出 io

    学习JAVA  输入输出篇 java不像C中拥有scanf这样功能强大的函数,大多是通过定义输入输出流对象.常用的类有BufferedReader,Scanner.实例程序:一,利用 Scanner ...

  10. linux_cpu信息查询

    查看cpu信息: [root@css-management ~]# cat /proc/cpuinfo processor : 0vendor_id : GenuineIntelcpu family ...