Log4j的Jar包下載地址:http://logging.apache.org/,具體步驟在Log4jDemo註釋。
* Log4j技術
* 在程序中的日誌實現步驟
* 項目:log4j
* 若要在自己的程序中寫入日誌語句,則可按照以下步驟進行:
* (1)導入Jar包
* 在項目中導入log4j需要的jar包。將Log4j框架的zip文件進行解壓,在其根目錄下就有其jar包。
* 本次演示爲:log4j-1.2.17.jar
* (2)放入日誌輸出控制文件
* 將屬性文件log4j.properties直接放到項目的src下
* (3)代碼中實現日誌記錄
* 在輸出日誌的類中創建日誌對象Logger,並通過Logger的方法在代碼中加入日誌輸出語句。在Java代碼中進行日誌輸出,需要用到Logger類的靜態方法getLogger()。
* 注意,Logger爲org.apache.log4j包中的類。
代碼實現:
import org.apache.log4j.Logger;
public class Log4jDemo {
/*
* 一個完成的軟件,日誌是不可少的。程序從開發、測試、維護、運行等環節,都需要想控制檯或文件等位置輸出大量信息。這些信息的輸出,在很多時候是使用System.out.println()無法完成的。
* 日誌信息根據用途與記錄內容的不同,分爲調試日誌、運行日誌、異常日誌等。
* 用於日誌記錄的技術很多,如jdk的logger技術,apache的log4j、log4j2技術等。
* Log4j的全稱Log for java,即專門用於java語言的日誌記錄工具。
* Log4j下載地址:http://logging.apache.org/
* 具體下載步驟如下
* 步驟1:進入“http://logging.apache.org/”
* 步驟2:點頁面“Apache Log4j”下的“Project site »”按鈕
* 步驟3:點頁面左側窗口的“Download”,進入的是最新版本的下載頁,本次測試使用的是log4j-1.2.17版本,
* (1)bin代表二進制class文件(由java文件編譯而成),src代表源碼(java源碼),源碼source比binary大一些,一般正常使用下載bin類型即可,如果要學習源碼下載src類型。
* (2).tar.gz是linux的壓縮包,.zip是windows的壓縮包
* 因此:bin.tar.gz是適用於linux、MacOsX系統的二進制文件
* bin.zip是適用於windows的二進制文件
* src.tar.gz是linux下的源碼
* src.zip是windows的源碼
* 步驟4:本次測試使用的是log4j-1.2.17版本,點All previous releases of Apache log4j can be found in the archive repository.中的“archive repository”按鈕查詢所有舊版本
* 步驟5:點開1.2.17/ 2018-11-10 21:02 的舊版本,選擇log4j-1.2.17.zip 2013-01-31 17:53 4.5M進行下載,解壓後的log4j-1.2.17.jar
* 日誌級別
* 爲了方便對於日誌信息的輸出顯示,對日誌內容進行了分級管理。日誌級別由高到低,共分多個級別:fatal(致命的)、error、warn、info、debug、trace(堆棧)。
* 無論是將對日誌輸出到控制檯,還是文件,其輸出都會降低程序的運行效率。但由於調試、運行維護的需求,客戶的要求等原因,需要進行必須的日誌輸出。這時就必須要在代碼中既然日誌輸出語句。
* 這些輸出語句若在程序運行時全部執行,則勢必會降低運行效率。例如,使用System.out.println()將信息輸出到控制檯,則所有的該輸出語句均將執行。會大大降低程序的執行效率。而要使其不輸出,唯一的辦法就是將這些輸出語句逐個全部刪除。這是個費時費力的過程。
* 將日誌信息進行分級管理,便可方便的控制信息輸出內容及輸出位置:哪些信息需要輸出,哪些信息不需要輸出,只需要在一個日誌輸出控制文件中稍加修改即可。而代碼中的輸出語句不用做任何修改。
* 從這個角度來說,代碼中的日誌編寫,其實就是寫大量的輸出語句。只不過,這些輸出語句比較特殊,它們具有級別,在程序運行期間不一定被執行。它們的執行是由另一個控制文件控制。
* 日誌輸出控制文件
* Log4j的日誌輸出控制文件,主要由三個部分構成:
* (1)日誌信息的輸出位置:控制日誌信息將要輸出的位置,是控制檯還是文件等。
* (2)日誌信息的輸出格式:控制日誌信息的顯示格式,即以怎樣的字符串形式顯示。
* (3)日誌信息的輸出級別:控制日誌信息的顯示內容,即顯示哪些級別的日誌信息。
* 有了日誌輸出控制文件,代碼中只要設置好日誌信息內容及其級別即可,通過控制文件便可控制這些日誌信息的輸出。
* Log4j技術
* 在程序中的日誌實現步驟
* 項目:log4j
* 若要在自己的程序中寫入日誌語句,則可按照以下步驟進行:
* (1)導入Jar包
* 在項目中導入log4j需要的jar包。將Log4j框架的zip文件進行解壓,在其根目錄下就有其jar包。
* 本次演示爲:log4j-1.2.17.jar
* (2)放入日誌輸出控制文件
* 將屬性文件log4j.properties直接放到項目的src下
* (3)代碼中實現日誌記錄
* 在輸出日誌的類中創建日誌對象Logger,並通過Logger的方法在代碼中加入日誌輸出語句。在Java代碼中進行日誌輸出,需要用到Logger類的靜態方法getLogger()。
* 注意,Logger爲org.apache.log4j包中的類。
* 代碼中事項
* ① 若項目src穆下沒有log4j.properties會報異常如下:
* Please initialize the log4j system properly.
* ② 日誌輸出會根據log4j.properties文件中日誌級別的設置進行輸出,會輸出到指定位置。
* 輸出指定級別及其更高級別的信息。如指定info級別,則會輸出fatal、error、warn、info級別的信息
* ③ 日誌輸出控制文件分析
* (1)日誌屬性文件log4j.properties是專門用於控制日誌輸出的。其主要進行三方面控制:
* 輸出位置:控制日誌將要輸出的位置,是控制檯還是文件等
* 輸出佈局:控制日誌信息的顯示形式
* 輸出級別:控制要輸出的日誌級別
* (2)日誌屬性文件由兩個對象組成:日誌附加器+根日誌
* 根日誌:即爲Java代碼中的日誌記錄器,其主要由兩個屬性構成:日誌輸出級別與日誌附加器
* 日誌附加器:是由日誌輸出位置定義,由其它很多屬性進行修飾,如輸出佈局、文件位置、文件大小等。
* log4j.properties
* / / \ \
* / / \ \
* 日誌輸出級別 日誌附加器1 ... 日誌附加器N
* / / \ \
* / / \ \
* 輸出佈局 文件位置 ... 文件大小
* (3)定義日誌附加器appender
* 所謂日誌附加器,就是爲日誌記錄器附加上很多其它設置信息。附加器的本質是一個接口,其定義語法爲:log4j.appender.appenderName=輸出位置
* appenderName爲自定義名稱
* 輸出位置爲log4j指定的類型,是定義好的一些appender接口的實現類。查看log4j框架解壓目錄下的站點目錄site的index.jsp中的JavaDoc,可看到log4j的API。
* 常用的附加器實現類(Interface Appender)如下:
* org.apache.log4j.ConsoleAppender:日誌輸出到控制檯
* org.apache.log4j.FileAppender:日誌輸出到文件
* org.apache.log4j.RollingFileAppender:當日志文件大小到達指定尺寸的時候將產生一個新的日誌文件
* org.apache.log4j.DailyRollingFileAppender:每天產生一個日誌文件
* 例:定義一個名稱爲console的控制檯附加器:
* ##define an appender named console
* log4j.appender.console=org.apache.log4j.ConsoleAppender
* (4)修飾日誌附加器
* 所謂修飾日誌附加器,就是爲定義好的附加器添加一些屬性,已控制到指定位置的輸出。不同的附加器,其修飾屬性不同。
* 控制檯附加器:
* Target:控制輸出到控制檯的使用目標。其值爲System.out或System.err。它們的區別是,System.out是以黑色字體顯示到控制檯,而System.err則是以紅色字體顯示
* 例:##define an appender named console
* log4j.appender.console=org.apache.log4j.ConsoleAppender
* #The Target value is System.out or System.err
* log4j.appender.console.Target=System.out
*
* 文件附加器:
* File日誌要輸出的文件位置及文件名稱
* 例:##define an appender named file
* log4j.appender.file=org.apache.log4j.FileAppender
* #define the file path and name
* log4j.appender.file.File=d:/logfile.txt
*
* 滾動文件附加器:
* MaxFileSize:用於指定日誌文件的最大值,若文件超過指定值,將自動產生另一個日誌文件
* 例:##define an appender named rollfile
* log4j.appender.rollfile=org.apache.log4j.RollingFileAppender
* #define the file path and name
* log4j.appender.rollfile.File=d:/logrollfile.txt
* #set the log's size
* log4j.appender.rollfile.MaxFileSize=10KB
* #set the layout type of the apperder
* log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
* #set the layout format pattern
* log4j.appender.rollfile.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n
*
* log4j常用日誌信息的格式(佈局)類型:
* org.apache.log4j.HTMLLayout(網頁佈局,以HTML表格形式佈局),
* org.apache.log4j.SimpleLayout(簡單佈局,包含日誌信息的級別和信息字符串),
* org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息),
* org.apache.log4j.PatternLayout(匹配器佈局,可以靈活地指定佈局模式。其主要是通過設置PatternLayout的ConversionPattern屬性值來控制具體輸出格式的。)
* ConversionPattern的值中有很多控制字符,這些字符的意義如下表所示:
* 格式名 含義
* %c 輸出日誌信息所屬的類的全名
* %d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyyy-MM-dd HH:mm:ss },輸出類似:2002-10-18- 22:10:28
* %f 輸出日誌信息所屬的類的類名
* %l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
* %m 輸出代碼中指定的信息,如log(message)中的message
* %n 輸出一個回車換行符,Windows平臺爲“rn”,Unix平臺爲“n”
* %p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則爲DEBUG,依此類推
* %r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數
* %t 輸出產生該日誌事件的線程名
* (5)配置根Logger
* 配置rootLogger,以便於代碼加載來控制日誌的輸出。其語法爲:log4j.rootLogger=[level],appenderName,...
* 其中,level是日誌記錄的優先級,分爲OFF/FATAL/ERROR/WARN/INFO/DEBUG/ALL。Log4j建議只使用四個優先級,優先級從高到低分別是ERROR/WARN/INFO/DEBUG。OFF爲關閉日誌功能。
* 低級別的可以顯示高級別的,但是高級別的不能顯示低級別的。所以級別越高顯示的日誌信息越少。
*/
public static void main(String[] args) {
// 創建日誌記錄對象Logger
Logger logger = Logger.getLogger(Log4jDemo.class);
logger.debug("this is dubug message");
logger.info("this is info message");
logger.warn("this is warn message");
logger.error("this is error message");
}
}
log4j.properties文件的演示:
##define an appender named console
log4j.appender.console=org.apache.log4j.ConsoleAppender
#The Target value is System.out or System.err
log4j.appender.console.Target=System.out
#set the layout type of the apperder
log4j.appender.console.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.console.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n
##define an appender named file
log4j.appender.file=org.apache.log4j.FileAppender
#define the file path and name
log4j.appender.file.File=d:/logsfile.txt
#set the layout type of the apperder
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n
##define an appender named rollfile
log4j.appender.rollfile=org.apache.log4j.RollingFileAppender
#define the file path and name
log4j.appender.rollfile.File=d:/logrollfile.txt
#set the log's size
log4j.appender.rollfile.MaxFileSize=10KB
#set the layout type of the apperder
log4j.appender.rollfile.layout=org.apache.log4j.PatternLayout
#set the layout format pattern
log4j.appender.rollfile.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %c %L %m%n
##define a logger
#log4j.logger.\u5168\u9650\u5B9A\u6027\u7C7B\u540D\u6216\u63A5\u53E3\u540D=INFO,console,file,rollfile
log4j.rootLogger=INFO,console,file,rollfile
希望對你有幫助,祝你有一個好心情,加油!
若有錯誤、不全、可優化的點,歡迎糾正與補充!