概述


在使用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. 如何实现一个c/s模式的flv视频点播系统

    一.写在前面 视频点播,是一个曾经很热,现如今依然很热的一项视频服务技术.本人最近致力于研究将各种视频格式应用于点播系统中,现已研究成功FLV, F4V, MP4, TS格式的视频点播解决方案,完全支 ...

  2. swift 获取UI上某点点颜色

    extension UIView { func colorOfPoint (point: CGPoint) -> UIColor { var pixel = UnsafePointer<C ...

  3. Center OS mongodb安装

    一.下载        1.#cd /usr/local/src     2.#wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2. ...

  4. Soft Renderer的乐趣

    最近这一个月的闲暇时间在边学习<3D编程大师技巧>边做自己的Soft Renderer,一个月下来总算有了个“基本原型”的样子.主要是在编写图形管线的过程式代码,简单明了为第一个阶段的目标 ...

  5. C#对Windows服务的操作

    一.安装服务: private void InstallService(IDictionary stateSaver, string filepath) { try { System.ServiceP ...

  6. 项目源码--Android视频MV类网站客户端

    下载源码 技术要点: 1.视频MV类网站客户端框架 2.底部TAB功能模块 3.用户管理模块 4.结合优质动画技术,良好的用户体验 5.用户设置模块 6.sqlite数据库灵活的应用 7.源码带有非常 ...

  7. linux设备驱动之select

    转载:http://blog.csdn.net/mo_hui123456/article/details/7961619 select系统调用用于多路监控,为什么称为多路呢,它可监控多个文件,例如我监 ...

  8. eclipse中的tomcat debug模式启动报超时45s

    在eclipse中加入tomcat,开debug模式非常好用,这里就不介绍了 最近eclipse的tomcat开debug模式就是启动不了,增加时间也不能解决,但是非debug模式就可以打开,我觉得是 ...

  9. Linux上安装Mysql+Apache+Php

    一.安装Mysql 1.卸载默认的mysql yum -y remove mysql-libs-* Removed:  mysql-libs.x86_64 0:5.1.73-3.el6_5 卸载成功 ...

  10. K - Ancient Messages(dfs求联通块)

    K - Ancient Messages Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Subm ...