1. 程式人生 > >Java web中使用Log4j記錄日誌資訊

Java web中使用Log4j記錄日誌資訊

最近想記錄一下Log4j的使用,抽了點時間通過收集網上的資料整理了這份部落格,希望給需要用Log4j記錄日誌的朋友一點幫助,若有不對的地方,望指正。
Log4j是Apache的一個開源專案,通過使用Log4j,我們可以控制日誌資訊輸送的目的地是控制檯、檔案GUI組建,甚至是套介面伺服器、NT的事件記錄器、UNIX Syslog守護程序等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌的資訊級別,我們能夠更加細緻地控制日誌的生成過程。(摘自百度百科)
Apache的Log4j主要包括三個部分。在應用中要使用Log4j來記錄日誌,首先要知道這三個部分的作用,才知道如何去配置Log4j來記錄日誌。這三部分分別是:日誌資訊的優先順序、日誌資訊的輸入目的地和日誌資訊的輸出格式。下面就這三部分進行一個介紹,然後在最後給出一些例子講解如何配置Log4j。

一、日誌級別
日誌級別,是告訴Log4j什麼樣級別的日誌資訊才被記錄,主要包括以下幾個級別(級別依次由低到高):
ALL:各級別包括自定義的級別;
DEBUG:一般用在細粒度上,對除錯應用程式非常有幫助;
INFO:一般用在細粒度上,強調應用程式的執行全程;
WARN:指定具有潛在危害的情況;
ERROR:指定雖然發生錯誤事件,但任然不影響系統執行;
FATAL:指定非常嚴重的錯誤事件,可能會導致應用程式終止;
OFF:最高的級別,指定關閉日誌記錄所有功能。

二、日誌資訊輸出目的地
日誌資訊輸出目的地,指定Log4j記錄的日誌資訊輸出到哪裡。在日常的開發中,比較常用的有以下幾種:
1、org.apache.log4j.ConsoleAppender(控制檯):
可配置屬性:
Threshold:指定日誌訊息輸出的最低級別
InnediateFlush:日誌訊息是否立即輸出,預設為true
Target:指定由誰輸出,預設是System.out
2、org.apache.log4j.FileAppender(檔案):
可配置屬性:
Threshold:指定日誌訊息輸出的最低級別
encoding:可以指定任何字元編碼,預設是特定平臺的編碼方案
InnediateFlush:日誌訊息是否立即輸出,預設為true
File:指定日誌輸出到那個檔案
Append:指定日誌資訊是否是追加方式輸出到檔案中,預設為true
3、org.apache.log4j.RollingFileAppender(指定日誌檔案到達一定的大小之後產生一個新檔案):
該配置繼承與FileAppender,除了包括FileAppender可配置屬性外,還包括以下屬性:
MaxFileSize:指定日誌檔案到達一定的大小後,新產生一個檔案,可以指定單位有KB/MB/GB
MaxBackupIndex:指定可以新產生多少個檔案
4、org.appche.log4j.DailyRollingFileAppender(每天產生一個日誌檔案):
該配置繼承與FileAppender,除了包括FileAppender可配置屬性外,還包括以下屬性:
DatePattern:指定在什麼時候產生一個新的日誌檔案,預設是0點,可指定的格式:
'.'yyyy-MM:每個月的結束和下個月初
'.'yyyy-MM-dd:預設值,每天0點
'.'yyyy-MM-dd-a:每天0點和12點
'.'yyyy-MM-dd-HH:每小時
'.'yyyy-MM-dd-HH-mm:每分鐘
'.'yyyy-ww:每個星期的第一天
5、org.apache.log4j.jdbc.JDBCAppender(記錄日誌資訊到資料庫):
可配置屬性:
bufferSize:設定緩衝區的大小,預設為1
driver:設定資料庫驅動
layout:設定日誌使用的佈局,預設是org.apache.log4j.PatternLayout
sql:指定語句在每次記錄事件發生的時間執行,可以是insert/update/delete
url:設定jdbc url
user:設定資料庫使用者名稱
password:資料庫密碼  

三、日誌資訊輸出格式
可配置的輸出格式有以下幾種:
1、org.apache.log4j.HTMLLayout(以HTML表格形式佈局)
2、org.apache.log4j.PatternLayout(可以靈活指定佈局格式)
3、org.apache.log4j.SimpleLayout(包含日誌的級別和資訊字串)
4、org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等資訊)
通過以上的可配置佈局,還需要指定org.appender.appendName.layout.ConversionPattern屬性的具體格式,這裡以一個例子說明:
log4j.appender.R.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ss} %c %m%n
具體配置項如下說明:
-X:日誌資訊輸入左對齊
%p:輸出日誌的級別
%d:指定日期的輸出格式
%r:輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c:輸出日誌資訊所屬的類目,通常就是類全名
%t:輸出產生該日誌時間的執行緒名
%l:輸出日誌事件的發生位置,包括類名、發生的執行緒以及在程式碼中的行數
%x:輸出和當前執行緒相關聯的巢狀診斷環境
%%:輸出一個“%”
%F:輸出日誌訊息產生是所在的檔名稱
%L:輸出程式碼中的行號
%m:輸出程式碼中指定的日誌資訊
%n:輸出一個回車換行符

介紹完Log4j的三個部分的常用配置,下面結合例子來展示一下真實環境中的配置例子:
1、下載Log4j,下載完後把jar包拷到lib目錄下
下載地址:http://logging.apache.org/log4j/1.2/download.html
2、編寫配置檔案,並把檔案加入到classpath中:

這裡寫圖片描述
3、在web.xml中配置啟動伺服器時啟動Log4j 
這裡寫圖片描述
4、在程式碼中載入Log4j配置資訊: 
這裡寫圖片描述

通過以上4個步驟,那麼Log4j的環境就算搭建完成了。由於是基於java web搭建的Log4j,所以需要啟動伺服器來進行測試。這裡我以執行一個sql為例子,下圖是在某一段程式碼中使用了Log4j記錄日誌:

這裡寫圖片描述

控制檯輸入日誌:

這裡寫圖片描述

日誌檔案輸出:

這裡寫圖片描述