AMQ学习笔记 - 19. 问题解决 - 控制Atomikos的日志输出

概述


在使用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>
分析依赖关系如下:
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]

 

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

参考目录


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





转载于:https://www.cnblogs.com/ywjy/articles/5434835.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在编译过程,出现了一个问题:skipping incompatible /data1/zhuzihao6/work/AMQ/openssl/lib//libssl.so when searching for -lssl。这个问题的原因是库文件不兼容,可能是由于系统的位数不匹配导致的。 解决这个问题有以下几种方法: 1. 检查系统的位数:在shell输入getconf LONG_BIT命令来查看系统的位数。如果系统是64位的,而库文件是32位的,那么就会出现这个问题。可以尝试将不兼容的库文件替换为匹配系统位数的库文件,或者进行相应的软链接操作。 2. 检查库文件路径:确保编译时使用的库文件路径是正确的,库文件存在于该路径下。可以尝试使用ln命令创建软链接,将正确的库文件链接到编译时所需的路径下。 3. 检查库文件版本:确保使用的库文件版本与编译时所需的版本匹配。如果版本不一致,可能会导致库文件不兼容的问题。可以尝试使用匹配版本的库文件来解决问题。 请根据具体情况选择适合的方法来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [QT编译问题:skipping incompatible /usr/lib//libboost_system.so when searching for -lboost_system](https://blog.csdn.net/weixin_46813854/article/details/129147423)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [04-----关于/usr/bin/ld: skipping incompatible /xxx/libmysqlclient.so when searching for -lmysql](https://blog.csdn.net/weixin_44517656/article/details/118754776)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值