文章目錄
- 1. JCL 簡介
- 2. JCL 入門
- 3. JCL原理
1. JCL 簡介
- 全稱為Jakarta Commons Logging,是Apache提供的一個通用日志API。
- 它是為 "所有的Java日志實作"提供一個統一的接口,它自身也提供一個日志的實作,但是功能非常常弱(SimpleLog)。是以一般不會單獨使用它。它允許開發人員使用不同的具體日志實作工具: Log4j,Jdk自帶的日志(JUL)
- JCL 有兩個基本的抽象類:
(基本記錄器)和Log
(負責建立Log執行個體)LogFactory
2. JCL 入門
- 添加依賴
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
- log4j.properties
log4j.rootLogger = trace,console
log4j.appender.console = org.apache.log4j.ConsoleAppender
# 指定消息格式 layout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
# 指定消息格式的内容
log4j.appender.console.layout.conversionPattern = [%-10p]%r %l %d{yyyy-MM-dd HH:mm:ss.SSS}
@Test
public void testQuick() throws Exception {
// 擷取 log 日志記錄器對象
Log log = LogFactory.getLog(JCLTest.class);
// 日志記錄輸出
log.info("hello jcl");
}
- 為什麼要使用日志門面:
- 面向接口開發,不再依賴具體的實作類,減少代碼的耦合
- 項目通過導入不同的日志實作類,可以靈活的切換日志架構
- 統一API,友善開發者學習和使用
- 統一配置便于項目日志的管理
3. JCL原理
- 通過LogFactory動态加載Log實作類
- 日志門面支援的日志實作數組
private static final String[] classesToDiscover =
new String[]{"org.apache.commons.logging.impl.Log4JLogger",
"org.apache.commons.logging.impl.Jdk14Logger",
"org.apache.commons.logging.impl.Jdk13LumberjackLogger",
"org.apache.commons.logging.impl.SimpleLog"};
- 擷取具體的日志實作
for(int i = 0; i < classesToDiscover.length && result == null; ++i) {
result = this.createLogFromClass(classesToDiscover[i], logCategory,true);
}