天天看點

JCL基本使用

文章目錄

  • ​​1. JCL 簡介​​
  • ​​2. JCL 入門​​
  • ​​3. JCL原理​​

1. JCL 簡介

  • 全稱為Jakarta Commons Logging,是Apache提供的一個通用日志API。
  • 它是為 "所有的Java日志實作"提供一個統一的接口,它自身也提供一個日志的實作,但是功能非常常弱(SimpleLog)。是以一般不會單獨使用它。它允許開發人員使用不同的具體日志實作工具: Log4j,Jdk自帶的日志(JUL)
  • JCL 有兩個基本的抽象類:​

    ​Log​

    ​​(基本記錄器)和​

    ​LogFactory​

    ​(負責建立Log執行個體)
  • JCL基本使用

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");

}      
  • 為什麼要使用日志門面:
  1. 面向接口開發,不再依賴具體的實作類,減少代碼的耦合
  2. 項目通過導入不同的日志實作類,可以靈活的切換日志架構
  3. 統一API,友善開發者學習和使用
  4. 統一配置便于項目日志的管理

3. JCL原理

  1. 通過LogFactory動态加載Log實作類
  2. 日志門面支援的日志實作數組
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"};      
  1. 擷取具體的日志實作
for(int i = 0; i < classesToDiscover.length && result == null; ++i) {
  result = this.createLogFromClass(classesToDiscover[i], logCategory,true);
}      
上一篇: JUL日志架構