Log4j快速入門

Log4j快速入門

參考資料

前言

概述

配置

log4j.properties配置

logger配置

Appender和Layout配置

實現

總結


參考資料

官方文檔:https://logging.apache.org/log4j/2.x/

組件模塊:https://blog.csdn.net/Evankaka/article/details/45815047

layout模塊:https://blog.csdn.net/zengxiaosen/article/details/55804423

前言

        因爲在學校的學習中,很少有接觸到日誌相關的內容,因此可以說是一個小白。當年剛參加工作時,我作爲小白碰到一個基本上完全陌生的事物log4j,又沒有師傅領路,可謂吃盡苦頭。幸好網上關於log4j的文檔也很多,當時的我也是翻閱了大量的文檔,才得以初步學會使用。寫這篇文章的契機是給一個同事討論需求時涉及到了log4j的相關內容,發現他完全沒有接觸過,然後討論就變成了單方面培訓(心裏苦啊)。爲了避免這種重複勞動,我查閱了很多log4j的相關文檔,並對他們進行了彙總和整理,特整理出一篇簡單的log4j入門文檔,供後來者閱讀和學習,本文是基於log4j-1.2.17進行編寫,需要有一定的java和maven基礎,只是針對log4j如何使用進行講解,方便閱讀者快速入門,使用log4j,不涉及深層內容。

概述

        在代碼裏使用log是一種低成本的方法去debug它,經常被使用在多線程應用和高併發應用。使用log有很多優點,它可以提供一個在運行應用的準確上下文信息;日誌的輸出不需要人工干預;日誌可以存儲在持久化媒介中。

        日誌也有其缺點,它會使應用變慢。log4j對次也進行了優化,提升了性能。

配置

        log4j有三大組件:分別爲Logger、Appender、Layout,都通過log4j.properties進行配置。

        Logger爲日誌記錄器,指定輸出日誌的級別和輸出的目的地即Appender。

        Appender爲日誌附着器,用來指定日誌的輸出目標,例如輸出到控制檯、文件或者自定義組件如kafka消息隊列等。

        Layout定義日誌輸出內容格式,結合Appender使用。

log4j.properties配置

log4j.rootLogger=DEBUG,console
log4j.logger.org=ERROR
log4j.logger.org.springframework=INFO,myLogFile
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] [%p] - %m%n
log4j.appender.myLogFile=org.apache.log4j.FileAppender
log4j.appender.myLogFile.file=c:/test-log.log
log4j.appender.myLogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.myLogFile.layout.conversionPattern=%d [%c]-[%-5p]%m%n

        Logger配置中,rootLogger是所有logger的父節點,對於一般的logger而言,如上文的log4j.logger.org.springframework,org.springframework即爲該logger的名字,INFO爲輸出級別,該logger只會輸出INFO級別以上(包括INFO)的日誌到後面的myLogFile appender中。

logger配置

#根logger配置
log4j.rootLogger=[level],appenderName1,appenderName2,...
#普通logger配置
log4j.logger.loggerName=[level],appenderName3,appenderName4,...

        level爲日誌級別,除了自定義的日誌級別,一般的日誌級別從高到低爲OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL。一般日常中我們通常指用只用四個級別ERROR,WARN,INFO,DEBUG。level配置用於過濾日誌輸出,例如當配置的level爲INFO時,在程序中使用Logger.debug("some message"),日誌信息不會被打印出來,通過配置log4j.properties即可控制日誌輸出級別,debug通常用於測試環境,對業務進行調試。而生產環境中不需要那麼多DEBUG信息,通常將日誌級別設爲INFO。

        appenderName*爲日誌輸出目的地,如上面log4j.properties中配置的console和myLogFile。

Appender和Layout配置

        Appender配置日誌輸出的目的地,因爲Layout是定義日誌輸出格式的,需要結合Appender使用,所以這裏兩者結合起來一起介紹,其配置語法如下:

#配置appender使用類
log4j.appender.appenderName=appender.class
log4j.appender.appenderName.option1=value1
...
log4j.appender.appenderName.optionN=valueN
#配置appender的layout,appender通過使用option配置使用layout
log4j.appender.appenderName.layout = layout.class
log4j.appender.appenderName.layout.option1=value1
…
log4j.appender.appenderName.layout.optionN=valueN

        Log4j已經提供了一些常用的appender類和layout類,如果已有的類無法滿足,Log4j中appender.class和layout.class也可以自定義,因爲是本文爲Log4j入門使用教程,就不再詳細深入了。

        Log4j常用的自帶appender使用類如下:

org.apache.log4j.ConsoleAppender(控制檯)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

        Log4j常用的自帶layout類模板如下:

org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式)
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串)
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

        Layout一般都需要有一個option參數conversionPattern來指定日誌輸出格式,例如本章節一開始的log4j.properties,我們可以看到該參數的value是由一串標識符組成的,我們通過這串標識符來控制日誌的輸出,常用的標識符如下:

-X: X信息輸出時左對齊 
%p: 輸出日誌信息優先級,即DEBUG,INFO,WARN,ERROR,FATAL, 
%d: 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},輸出類似:2011-10-18 22:10:28,921 
%r: 輸出自應用啓動到輸出該log信息耗費的毫秒數 
%c: 輸出日誌信息所屬的類目,通常就是所在類的全名 
%t: 輸出產生該日誌事件的線程名 
%l: 輸出日誌事件的發生位置,相當於%C.%M(%F:%L)的組合,包括類目名、發生的線程,以及在代碼中的行數。 
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤其用到像java servlets這樣的多客戶多線程的應用中。 
%%: 輸出一個"%"字符 
%F: 輸出日誌消息產生時所在的文件名稱 
%L: 輸出代碼中的行號 
%m: 輸出代碼中指定的消息,產生的日誌具體信息 
%n: 輸出一個回車換行符,Windows平臺爲"\r\n",Unix平臺爲"\n"輸出日誌信息換行 

實現

        配置講解完,log4j的入門就已經完成了大半了,接下來,簡單就log4j使用進行介紹。

        第一步,通過maven引入依賴,或者直接將jar包添加至lib下。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j<artifactId>
    <version>1.2.17</version>
</dependency>

        第二步,添加log4j.properties配置文件到classpath下。

log4j.rootLogger=DEBUG,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] [%p] - %m%n

        第三步,在程序中使用log4j進行日誌輸出,這裏使用測試類Test進行測試,具體使用如下:

import org.apache.log4j.Logger;

public class Test {
    private static Logger logger = Logger.getLogger(Test.class);
    public static void main(String[] args) {
        logger.debug("DEBUG ...");
        logger.info("INFO ...");
        logger.error("ERROR ...");
    }
}

        觀察控制檯即可得到輸出信息:

2019-12-25 21:47:13,332 [main] [DEBUG] - DEBUG ...
2019-12-25 21:47:13,333 [main] [INFO] - INFO ...
2019-12-25 21:47:13,333 [main] [ERROR] - ERROR ...

總結

        本文僅僅是對log4j的一個初步入門,應付一些日常工作應該還是可以的,但如果要做到精通,本文是遠遠不夠的。可以通過結合官方文檔、源碼、網上文檔的方式,進行更加深入的學習,這就要靠各位自己了。我對log4j的掌握程度也就停留在本文的階段,如果將來有機會深入學習的話,可能還有續集,嘿嘿。

 

發佈了5 篇原創文章 · 獲贊 4 · 訪問量 4623
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章