歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Log4j1.x初步認識

初識log4j1.x

研究源碼首先要對項目要有整體的認識,這一章節主要讓大家對log4j1.x有一個整體的認識,並以此為切入點,認識log4j1.x的真個框架

1 整體認識

先整體上對log4j1有一個整體的認識,然後再在後面對log4j的研究中逐漸加深對其的理解。先不必糾結在整體的類圖和流程圖中。

(這裡類圖和流程從簡,能夠表達內容即可)

1.1 打印日志流程圖

流程說明:

-第一步: 初始化Logger容器LoggerRepository,默認為Hierachy,跟節點是RootLogger

-第二步: 獲取Logger實例,調用LogManager.getLogger()獲得Logger實例,存在直接返回,不存在創建返回

-第三步: 判斷是否打印日志(請求打印日志的Level要高於或者等於Logger的級別,請求打印日志語句才能生效),Logger實例的所有Appender按照Layout的格式輸出日志

1.2 類圖

類圖說明:

  • LoggerFactory : Logger的工廠,用來獲得Logger實例

  • LoggerRepository: Logger的容器

  • RepositorySelector: 獲取Logger容器

  • LogManager: Logger的管理中心,獲取Logger容器、Logger實例、RootLogger

  • Logger: 日志記錄器

  • Appender: 日志輸出目的地

  • Layout: 日志輸出格式

2 搭建環境

創建maven項目,加入依賴:


<!-- Log4j1 日志框架包 -->

<dependency> 

    <groupId>log4j</groupId>

    <artifactId>log4j</artifactId> 

    <version>1.2.17</version>

</dependency>

3 代碼示例(以此為切入點了解架構)


public class BasicConfiguratorDemo { 

    private static final Logger LOGGER =Logger.getLogger(BasicConfiguratorDemo.class); 

    public static void main(String[] args){   

        BasicConfigurator.configure(); 

        LOGGER.info("Hello World"); 

    }

}

輸出結果:


1 [main] INFO com.log.log4j.configure.BasicConfiguratorDemo  - Hello World

4 代碼運行流程

4.1 獲取Logger流程(Logger.getLogger(BasicConfiguratorDemo.class))

4.2 BasicConfigurator.configure()配置流程

獲得RootLogger,添加ConsoleAppender,由於繼承關系,其他Logger的父Logger都是RootLogger.所以其他Logger的Appender都是這裡定義的ConsoleAppender


publicstaticvoidconfigure() { 

     Logger root = Logger.getRootLogger();

     root.addAppender(new ConsoleAppender(

           new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN)));

}

4.3 打印Hello World(LOGGER.info("Hello World"))流程

源碼:


public void info(Object message) { 

        if(repository.isDisabled(Level.INFO_INT)) 

            return; 

        if(Level.INFO.isGreaterOrEqual(this.getEffectiveLevel())) 

            forcedLog(FQCN, Level.INFO, message, null);

}

//Level具有繼承特性,如果Logger本身沒有設置Level,會繼承父Logger的Level,Logger至少有一個Parent(RootLogger),具體參考log4j文檔

public Level getEffectiveLevel() { 

    for(Category c = this; c != null; c=c.parent) { 

        if(c.level != null)

            return c.level; 

    } 

    return null; // If reached will cause an NullPointerException. 

}

流程:

更多Log4j相關教程見以下內容

Log4j配置詳解 http://www.linuxidc.com/Linux/2014-10/108401.htm

Apache Log4j 2 更多內容請看: http://logging.apache.org/log4j/2.x/

Log4j入門使用教程 http://www.linuxidc.com/Linux/2013-06/85223.htm

Log4j 日志詳細用法 http://www.linuxidc.com/Linux/2014-09/107303.htm

Hibernate配置Log4j顯示SQL參數 http://www.linuxidc.com/Linux/2013-03/81870.htm

Log4j學習筆記(1)_Log4j 基礎&配置項解析 http://www.linuxidc.com/Linux/2013-03/80586.htm

Log4j學習筆記(2)_Log4j配置示例&Spring集成Log4j http://www.linuxidc.com/Linux/2013-03/80587.htm

Log4j 的詳細介紹:請點這裡
Log4j 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved