Log4J 使用詳解

    Log4J 是 Apache 的一個開放源代碼項目,通過使用 Log4J ,可以控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接字服務器、NT 的事件記錄器和 UNIX Syslog 守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程。te

    Log4J 由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式。

  • 日誌信息的優先級從高到低有OFF、FETAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL(見源碼 org.apache.log4j.Level),分別用來指定這條日誌信息的重要程度;
  • 日誌信息的輸出目的地指定了日誌將打印到控制檯還是文件中;
  • 日誌信息的輸出格式則控制了日誌信息的顯示內容格式。

1 配置文件

    Log4J 的配置文件(Configuration File)就是用來設置記錄器的級別、存放器和佈局的,通過配置,可以創建出Log4J的運行環境。

    Log4J支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式(key=value 格式)的文件。

    例如:

    Log4J使用properties格式做爲配置文件的基本格式如下:

1.1 配置根記錄器(Root Logger)

    根記錄器的配置語法爲:

    其中,[level] 是日誌記錄的優先級,分爲 OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL 或者自定義的級別。Log4J 建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裏定義的級別,可以控制到應用程序中相應級別的日誌信息的開關。比如在這裏定 義了 INFO 級別,則應用程序中所有 DEBUG 級別的日誌信息將不被打印出來。
    appenderNameN 就是指定日誌信息輸出到哪個地方,可以同時指定多個輸出目的地。

1.2 配置日誌信息輸出目的地(Appenders)

    日誌輸出目的地(Appender)的配置語法爲:

其中,Log4J 提供的 appender 主要有以下幾種:

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

1.2.1 ConsoleAppender 選項

  • Threshold=WARN:指定日誌消息的輸出最低層次。
  • ImmediateFlush=true:默認值是 true,意謂着所有的消息都會被立即輸出。
  • Target=System.err:默認情況下是System.out,指定輸出控制檯。

1.2.2 FileAppender 選項

  • Threshold=WARN:指定日誌消息的輸出最低層次。
  • ImmediateFlush=true:默認值是 true,意謂着所有的消息都會被立即輸出。
  • File=mylog.txt:指定消息輸出到 mylog.txt 文件。
  • Append=false:默認值是 true,即將消息增加到指定文件中,false 指將消息覆蓋指定的文件內容。

1.2.3 DailyRollingFileAppender 選項

  • Threshold=WARN:指定日誌消息的輸出最低層次。
  • ImmediateFlush=true:默認值是 true,意謂着所有的消息都會被立即輸出。
  • File=mylog.txt:指定消息輸出到 mylog.txt 文件。
  • Append=false:默認值是 true,即將消息增加到指定文件中,false 指將消息覆蓋指定的文件內容。
  • DatePattern=’.'yyyy-ww:每週滾動一次文件,即每週產生一個新的文件。當然也可以指定按月、周、天、時和分。即對應的格式如下:
      (1) ’.'yyyy-MM: 每月
      (2) ’.'yyyy-ww: 每週
      (3) ’.'yyyy-MM-dd: 每天
      (4) ’.'yyyy-MM-dd-a: 每天兩次
      (5) ’.'yyyy-MM-dd-HH: 每小時
      (6) ’.'yyyy-MM-dd-HH-mm: 每分鐘

1.2.4 RollingFileAppender 選項

  • Threshold=WARN:指定日誌消息的輸出最低層次。
  • ImmediateFlush=true:默認值是 true,意謂着所有的消息都會被立即輸出。
  • File=mylog.txt:指定消息輸出到 mylog.txt 文件。
  • Append=false:默認值是 true,即將消息增加到指定文件中,false 指將消息覆蓋指定的文件內容。
  • MaxFileSize=100KB:後綴可以是KB、MB 或 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到 mylog.log.1 文件。 
  • MaxBackupIndex=2:指定可以產生的滾動文件的最大數。

1.3 配置日誌信息佈局(Layouts)

    日誌信息佈局(Layouts)的配置語法爲:

    其中,Log4J 提供的 layout 主要有以下幾種:

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

1.4 輸出格式設置

    在配置文件中可以通過log4j.appender.A1.layout.ConversionPattern設置日誌輸出格式。
    參數:

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

    可以在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:
(1) %20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,默認的情況下右對齊。
(2) %-20c:指定輸出category的名稱,最小的寬度是20,如果category的名稱小於20的話,”-”號指定左對齊。
(3) %.30c:指定輸出category的名稱,最大的寬度是30,如果category的名稱大於30的話,就會將左邊多出的字符截掉,但小於30的話也不會有空格。
(4) %20.30c:如果category的名稱小於20就補空格,並且右對齊,如果其名稱長於30字符,就從左邊交遠銷出的字符截掉。

2 程序中使用 Log4J

    在程序中使用 Log4J 之前,首先要將 logging-log4j-1.2.16.jar 導入到classpath中,並將 log4j.properties 放於src根目錄中,接下來就可以使用了。

2.1 得到記錄器

    使用Log4j,第一步就是獲取日誌記錄器,這個記錄器將負責控制日誌信息。其語法爲:

    通過指定的名字獲得記錄器,如果必要的話,則爲這個名字創建一個新的記錄器。Name一般取本類的名字,比如:

注:推薦使用commons-logging(需要導入commons-logging.jar)結合 Log4J 進行日誌記錄

2.2 插入記錄信息(格式化日誌信息)

當上兩個必要步驟執行完畢,您就可以輕鬆地使用不同優先級別的日誌記錄語句插入到您想記錄日誌的任何地方,其語法如下:

2.3 程序中初始化 Logger

  1. 在程序中調用 BasicConfigurator.configure() 方法:給根記錄器增加一個 ConsoleAppender;
  2. 輸出格式通過 PatternLayout 可設爲 "%-4r [%t] %-5p %c %x - %m%n";
  3. 根記錄器的默認級別是 Level.DEBUG;
  4. 配置放在文件裏,通過命令行參數傳遞文件名字,通過 PropertyConfigurator.configure(args[x]) 解析並配置;
  5. 配置放在文件裏,通過環境變量傳遞文件名等信息,利用 Log4J 默認的初始化過程解析並配置;
  6. 配置放在文件裏,通過應用服務器配置傳遞文件名等信息,利用一個特殊的 Servlet 來完成配置。

    例如:

    例如:

3 Log4J 比較全面的配置

    Log4J 的配置之簡單使它遍及於越來越多的應用中了:Log4J 配置文件實現了輸出到控制檯、文件、回滾文件、發送日誌郵件、輸出到數據庫日誌表、自定義標籤等全套功能,任意擇其一二使用就夠用了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章