概述
在使用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>
分析依賴關系如下:
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]
你可以選擇某一個實現進行綁定,但盡量使用一種實現。
參考目錄
- 為什么要使用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的日志輸出問題進行了討論。