本篇聊聊在Java界著名的log4j,Apache爲什麼要開發log4j?log4j與Java的關係是什麼?log4j爲什麼需要配置文件,這些問題本文都會給出答案
log4j是怎麼來的?
沒接觸過log4j的Java開發者,看到log4j這個名字,估計會腦袋發矇,這是啥玩意呢?log4j是Apache爲Java開發者提供的日誌工具,解釋一下就是log for java,給Java程序提供日誌輸出的工具。
問題又來了,Apache爲什麼要開發log4j呢?因爲Apache開發log4j是爲了補Java的短板。Java在設計之初,充分借鑑了C等其它編程語言的優點,其語言的簡潔性、易使用性以及跨平臺性都非常不錯,唯獨沒有設計日誌系統。這可苦了早期Java開發者了,當寫完的程序運行後,若發行程序的運行結果和預期的不一樣,開發者要發現程序所存在的問題,只能採用調試的方式逐一排查,費時費力。若程序已提交給客戶,在客戶環境下出現了問題,是無法進行調試排查的,只能寄希望於問題在開發環境中重現。
難以發現程序運行中出現的問題,是早期Java的一個短板,爲了解決這個短板。Apache開發了log4j,log4j可以把程序運行過程中的重要信息輸出到文件中,這些重要信息的輸出是由Java開發者來確定的,也就是說開發者在開發程序時,會把一些可能出現問題的變量、執行的語句狀態、重要的節點信息寫到文件中,當程序在運行過程中出現問題時,就可以從這些文件中跟蹤程序的運行信息,及時發現程序存在的問題,寫入程序運行信息的文件被稱爲系統日誌,log4j就是用來寫系統日誌的程序。
從哪兒下載log4j?
log4j對程序的監控和問題排查確實很有用,對沒有使用log4j的開發者來說,如何使用它呢?
等等,log4j怎麼變成log4j2了呢?log4j2是log4j的升級版,功能上自然比log4j要強大了很多。再說,Apache已經停止對log4j的更新了,我們自然要用log4j2了。下載的壓縮包裏面有三個重要的文件,把這三個文件複製到項目WEB-INF目錄下的lib目錄。
萬事具備,只欠東風
現在萬事具備,只欠東風。東風就是log4j2.xml配置文件,log4j會讀取這個配置文件。log4j爲什麼需要這個配置文件呢?因爲log4j可以把更多的日誌輸出控制權交給開發者。舉個例子,如果沒有配置文件,log4j會把日誌輸出到一個固定的位置,你沒有任何辦法想讓它把日誌文件輸出到你指定的位置;再來一個例子,假如你想自己定義輸出的日誌格式,沒有配置文件,你無能爲力。
下面是一個簡單配置文件的內容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
配置文件中的appenders標籤是用來定義日誌輸出位置的,在這個標籤下輸出位置可以定義多個,每個位置由子標籤來定義。如上面配置文件的Console標籤定義了日誌信息輸出到控制檯。Console標籤下的PatternLayout標籤定義了日誌的輸出格式,標籤的pattern屬性用來配置日誌輸出的格式,在這裏你可以更改爲自己喜歡的輸出格式,至於具體怎麼改,網上一大堆,這裏就不細說了,不過一般來說保持默認的輸出格式就可以了。
配置文件中的loggers標籤用來定義日誌輸出範圍,對日誌信息進行級別限制,在log4j中根據輸出日誌信息的重要程度,將日誌主要分爲六個級別,按重要程度排序爲fatal(致命)、error(錯誤)、warn(警告)、info(信息)、debug(調試)、trace(追蹤)。其中,最常用的是error和info,當程序能夠自己捕捉到錯誤,但錯誤不影響系統運行時,用error輸出錯誤和異常信息;在程序運行過程中,特別是在客戶環境下運行時,可以輸出一些程序的重要信息,用於發現程序的潛在問題,這是可以用info輸出信息。
loggers標籤下的root標籤中level屬性可以限制日誌的輸出級別,當level屬性設置爲info級別時,log4j只輸出info級別以上的日誌,即使你在程序中輸出了低於info級別的日誌,log4j也不會讓這些日誌信息輸出。
需要注意的是,log4j2.xml配置文件創建完成後,需要把log4j2.xml配置文件存儲到WEB項目的WEB-INF根目錄下。
使用log4j跟蹤程序
前面都是鋪墊,現在要開始真正幹活了。還是以Mooc項目爲案例,Mooc項目的工程文件和源代碼可以從碼雲上下載。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
|
加入log4j輸出日誌代碼很輕鬆,首先在類中用LogManager類實例化Logger對象。
1 2 |
|
然後就可以輸出你想要輸出的信息了。
1 2 3 |
|
日誌信息會輸出到控制檯,paraLogin的值爲xueshanfeihu,paraPsw的值爲123456。
1 2 |
|
使用log4j輸出log文件
輸出日誌信息到控制檯不是我們使用log4j的目的,目的是輸出日誌信息到文件。這次配置文件又起到作用了,打開log4j2.xml配置文件在appenders標籤下加入下面的子標籤。
1 2 3 4 5 6 |
|
在root標籤下面加入下面的子標籤。
1 |
|
完整的log4j2.xml配置文件內容如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
配置文件修改完成後,日誌信息將同步輸出到mooc.log文件。