1. 程式人生 > >log4j日誌的使用步驟和基本技術知識

log4j日誌的使用步驟和基本技術知識


*****************************log4j日誌的使用步驟

第一步:新增jar包支援
首先建立一個WEB工程,去log4j官網下log4j的JAR包匯入到工程的lib目錄下

第二步:新增並載入配置檔案
在src目錄下建一個log4j.properties 檔案
log4j啟動時,預設會尋找source folder(存放java原始碼的資料夾,當然也包括一些package資料夾,還可以包括其他檔案,即使src)下的log4j.xml配置檔案,若沒有,會尋找log4j.properties檔案。然後載入配置。配置檔案放置位置正確,就不需要在程式中手動載入log4j配置檔案。
PropertyConfigurator.configure("log4j.properties") 預設讀取的是專案根目錄的路徑。此時的log4j.properties要放在專案目錄下。
一個java專案會有很多的配置檔案,建議把所有的配置檔案放到一個資料夾下,例如,放到config資料夾。那麼在讀取這些配置檔案的時候要加上子目錄名稱。PropertyConfigurator.configure("config/log4j.properties");

該配置檔案內容可以為:
### 設定logger級別 ###
log4j.rootLogger=INFO,stdout,A1

### appender.stdout輸出到控制檯 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r [%-5p] [%t] ( %F,%L ) - %m%n

### appender.A1輸出到日誌檔案 ###
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.File=${catalina.base}/logs/test.log  ###日誌檔案在tomcat的logs資料夾中###
##注意上面日誌檔案相對應用根目錄路徑的寫法
log4j.appender.A1.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.A1.Append=true
## 輸出DEBUG級別以上的日誌
log4j.appender.A1.Threshold=DEBUG
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern= [%5p] [BYSXXGLXT] %d{yyyy-MM-dd HH:mm:ss}: %-4r     [%t] ( %F,%L ) - %m%n

第三步:獲得日誌記錄器
//取得日誌記錄器Logger,名字為本類的名字。
Logger logger = Logger.getLogger(this.getClass());

第四步:利用日誌記錄器生成日誌資訊,當以上三個必要步驟執行完畢後,便可以輕鬆地使用不同優先順序的日誌記錄語句插入想要記錄日誌的任何地方了。
logger.fatal("這是一條從TestServlet產生的fatal資訊!");
logger.error("這是一條從TestServlet產生的error資訊!");
logger.warn("這是一條從TestServlet產生的warn資訊!");
logger.debug("這是一條從TestServlet產生的debug資訊!");
logger.info("這是一條從TestServlet產生的info資訊!");



**************以下是log4j的基本知識

Log4j是Jakarta下的一個開原始碼的子專案,通過Log4j,可以使用定製的格式把除錯資訊和日誌資訊輸出到一個或多個需要的地方。

Log4j的組成
Log4j包括3個很重要的元件:公共類Logger、公共介面Appender和公共抽象類Layout。
1、公共類Logger
日誌記錄器(Logger)是日誌處理的核心元件,負責日誌資訊的生成。根據配置的日誌級別對生成的日誌進行輸出或截圖。

級別 描述
OFF 關閉所有日誌記錄的輸出
FATAL 輸出將會導致應用程式退出的嚴重錯誤事件資訊
ERROR 輸出不影響系統繼續執行的錯誤事件資訊
WARN 輸出會出現的潛在錯誤事件資訊
INFO 輸出應用系統的執行過程資訊
DEBUG 輸出應用程式的除錯資訊
ALL 開啟所有日誌記錄的輸出

2、公共介面Appender
Appender負責控制日誌記錄操作的輸出,用以指定日誌資訊的輸出目的地(如控制檯、檔案、回滾檔案、傳送日誌郵件、輸出到資料庫日誌表、自定義標籤等)。

Appender名稱 描述
ConsoleAppender 輸出到控制檯
FileAppender 輸出到指定檔案
RollingFileAppender 輸出到檔案,當檔案大小到達指定尺寸的時候產生一個新檔案
DailyRollingFileAppender 輸出到檔案,每天產生一個新檔案
WriterAppender 將日誌資訊以流格式傳送到任意指定的地方
JDBCAppender 輸出到指定的資料庫
SMTPAppender 以郵件形式傳送日誌資訊

3、公共抽象類Layout
Layout負責格式化Appender輸出
Log4j提供的layout格式有:

Layout名稱 描述
SimpleLayout 包含日誌資訊的級別和資訊字串
PatternLayout 根據指定的轉換模式格式化日誌輸出
HTMLLayout 以HTML表格形式輸出
TTCCLayout 包含日誌產生的時間、執行緒、類別等資訊

Log4j提供的輸出函式
引數名稱 描述
%m 輸出程式碼中指定的訊息內容
%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數
%c 輸出所屬的類別,通常就是所在類的全名
%t 輸出產生該日誌事件的執行緒名
%n 輸出一個回車換行符
%d 輸出日誌時間點的日期或時間
%l 輸出日誌事件的發生位置,包括類名稱,發生的執行緒,以及在程式碼中的行數


Log4j的配置檔案
Log4j支援兩種配置檔案格式,一種是XML格式的檔案,另一種是Java屬性檔案(鍵=值)

log4j.properties的示例
log4j.rootLogger=DEBUG,A1,A2,A3,A4,A5,A6

# 應用於控制檯
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n

# 應用於檔案
log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=${catalina.home}/webapps/testLog/logging.log
log4j.appender.A2.Append=true
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n


# 應用於檔案回滾
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=${catalina.home}/webapps/testLog/logging.log
log4j.appender.A3.Append=true
log4j.appender.A3.MaxFileSize=1000KB
log4j.appender.A3.MaxBackupIndex=1
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n


# 傳送日誌給郵件
log4j.appender.A4=org.apache.log4j.net.SMTPAppender
log4j.appender.A4.BufferSize=10
log4j.appender.A4.From=發件箱地址
log4j.appender.A4.SMTPHost=SMTP伺服器
log4j.appender.A4.Subject=郵件標題
log4j.appender.A4.To=收件箱地址
log4j.appender.A4.layout=org.apache.log4j.PatternLayout
log4j.appender.A4.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n



# 用於資料庫
log4j.appender.A5=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A5.URL=jdbc:mysql://localhost:3306/test
log4j.appender.A5.driver=com.mysql.jdbc.Driver
log4j.appender.A5.user=root
log4j.appender.A5.password=root
log4j.appender.A5.sql=INSERT INTO LOG4J (Message) VALUES ('%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n')
log4j.appender.A5.layout=org.apache.log4j.PatternLayout
log4j.appender.A5.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n

# 應用每日生成一個日誌檔案
log4j.appender.A6=org.apache.log4j.DaliyRollingFileAppender
log4j.appender.A6.File=${catalina.home}/webapps/testLog/logging.log
log4j.appender.A6.DatePattern=yyyyMMdd-HH'.log'
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} [INFO] %m%n