研究源碼首先要對項目要有整體的認識,這一章節主要讓大家對log4j1.x有一個整體的認識,並以此為切入點,認識log4j1.x的真個框架
先整體上對log4j1有一個整體的認識,然後再在後面對log4j的研究中逐漸加深對其的理解。先不必糾結在整體的類圖和流程圖中。
(這裡類圖和流程從簡,能夠表達內容即可)
流程說明:
-第一步: 初始化Logger容器LoggerRepository
,默認為Hierachy
,跟節點是RootLogger
-第二步: 獲取Logger
實例,調用LogManager.getLogger()
獲得Logger
實例,存在直接返回,不存在創建返回
-第三步: 判斷是否打印日志(請求打印日志的Level要高於或者等於Logger的級別,請求打印日志語句才能生效),Logger
實例的所有Appender
按照Layout
的格式輸出日志
類圖說明:
LoggerFactory : Logger的工廠,用來獲得Logger實例
LoggerRepository: Logger的容器
RepositorySelector: 獲取Logger容器
LogManager: Logger的管理中心,獲取Logger容器、Logger實例、RootLogger
Logger: 日志記錄器
Appender: 日志輸出目的地
Layout: 日志輸出格式
創建maven項目,加入依賴:
<!-- Log4j1 日志框架包 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
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.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 的下載地址:請點這裡