log4j日誌集成

1、介紹 java

Log4j是Apache的一個開放源代碼項目,經過使用Log4j,咱們能夠控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接口服務 器、NT的事件記錄器、UNIX Syslog守護進程等;咱們也能夠控制每一條日誌的輸出格式;經過定義每一條日誌信息的級別,咱們可以更加細緻地控制日誌的生成過程。
Log4j由三個重要的組件構成:日誌信息的優先級,日誌信息的輸出目的地,日誌信息的輸出格式。日誌信息的優先級從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌信息的重要程度;日誌信息的輸出目的地指定了日誌將打印到控制檯仍是文件中;而輸出格式則控制了日誌信息的顯示內容。web

2、配置文件
apache

其實您也能夠徹底不使用配置文件,而是在代碼中配置Log4j環境。可是,使用配置文件將使您的應用程序更加靈活。
Log4j支持兩種配置文件格式,一種是XML格式的文件,一種是properties格式的文件。下面咱們介紹使用properties格式作爲配置文件的方法:
多線程

示例: app

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

1. 配置根Logger,其語法爲: eclipse

log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。經過在這裏定義的級別,您能夠控制到應用程序中相應級別的日誌信息的開關。好比在這裏定義了INFO級別,則應用程序中全部DEBUG級別的日誌信息將不被打印出來。 maven

appenderName就是指定日誌信息輸出到哪一個地方。您能夠同時指定多個輸出目的地。佈局

2. 配置日誌信息輸出目的地Appender,其語法爲:
學習

log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.option = valueN

其中,Log4j提供的appender有如下幾種:
ui

org.apache.log4j.ConsoleAppender(控制檯),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(天天產生一個日誌文件),
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件), 
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)

(1).ConsoleAppender選項 

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

(2).FileAppender 選項 

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

(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: 每分鐘

(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:指定能夠產生的滾動文件的最大數。

3. 配置日誌信息的佈局,其語法爲:

log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class 
log4j.appender.appenderName.layout.option1 = value1 
… 
log4j.appender.appenderName.layout.option = valueN 
其中,Log4j提供的layout有如下幾種: 
org.apache.log4j.HTMLLayout(以HTML表格形式佈局), 
org.apache.log4j.PatternLayout(能夠靈活地指定佈局模式), 
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串), 
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

四、輸出格式設置

在配置文件中能夠經過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)的組合,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.Java:10)
%x: 輸出和當前線程相關聯的NDC(嵌套診斷環境),尤爲用到像Java servlets這樣的多客戶多線程的應用中。 
%%: 輸出一個」%」字符 
%F: 輸出日誌消息產生時所在的文件名稱 
%L: 輸出代碼中的行號 
%m: 輸出代碼中指定的消息,產生的日誌具體信息 
%n: 輸出一個回車換行符,Windows平臺爲」\r\n」,Unix平臺爲」\n」輸出日誌信息換行 

能夠在%與模式字符之間加上修飾符來控制其最小寬度、最大寬度、和文本的對齊方式。如:

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字符,就從左邊交遠銷出的字符截掉。

5.簡單配置log4j.properties文件以下:

###根logger設置###
log4j.rootLogger = INFO,console,file

### 輸出信息到控制檯###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = [%p] %d{yyyy-MM-dd HH:mm:ss} method: %l----%m%n

###輸出INFO 級別以上的日誌文件設置### 
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File = target/log4j_demo.log
log4j.appender.file.Append = true
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} method: %l - [ %p ]----%m%n

3、加載log4j.properties文件

 1.maven項目導入log4j的依賴

<dependency>
       <groupId>log4j</groupId>
       <artifactId>log4j</artifactId>
       <version>1.2.17</version>
</dependency>

2.例如Log4jDemo類:

package cn.xiaobing.web.auto.test;

import org.apache.log4j.Logger;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;

public class Log4jDemo {
    //1.建立一個Logger
    Logger logger = Logger.getLogger(Log4jDemo.class);
    //2.開始記錄日誌
    @BeforeSuite
    public void test0() {
        logger.info(" *** 開始執行Suite *** ");
    }
    @Test
    public void test1() {
        logger.info(" --- 正在執行方法1 --- ");
        
    }
    @Test
    public void test2() {
        logger.info(" --- 正在執行方法2 --- ");
    }
    @Test
    public void test3() {
        logger.info(" --- 正在執行方法3 --- ");
    }
    @Test
    public void test4() {
        logger.info(" --- 正在執行方法4 --- ");
    }
    @Test
    public void test5() {
        logger.info(" --- 正在執行方法5 --- ");
    }
    @AfterSuite
    public void test_over() {
        logger.info(" *** 執行Suite結束 *** ");
    }
}

3.控制檯輸出以下:

[TestNG] Running:
  C:\Users\Administrator\AppData\Local\Temp\testng-eclipse--113290236\testng-customsuite.xml

[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test0(Log4jDemo.java:14)---- *** 開始執行Suite *** 
[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test1(Log4jDemo.java:18)---- --- 正在執行方法1 --- 
[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test2(Log4jDemo.java:23)---- --- 正在執行方法2 --- 
[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test3(Log4jDemo.java:27)---- --- 正在執行方法3 --- 
[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test4(Log4jDemo.java:31)---- --- 正在執行方法4 --- 
[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test5(Log4jDemo.java:35)---- --- 正在執行方法5 --- 
PASSED: test1
PASSED: test2
PASSED: test3
PASSED: test4
PASSED: test5

===============================================
    Default test
    Tests run: 5, Failures: 0, Skips: 0
===============================================

[INFO] 2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test_over(Log4jDemo.java:39)---- *** 執行Suite結束 *** 

===============================================
Default suite
Total tests run: 5, Failures: 0, Skips: 0
===============================================

4.記錄日誌到文件以下log4j_demo.log:

2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test0(Log4jDemo.java:14) - [ INFO ]---- *** 開始執行Suite *** 
2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test1(Log4jDemo.java:18) - [ INFO ]---- --- 正在執行方法1 --- 
2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test2(Log4jDemo.java:23) - [ INFO ]---- --- 正在執行方法2 --- 
2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test3(Log4jDemo.java:27) - [ INFO ]---- --- 正在執行方法3 --- 
2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test4(Log4jDemo.java:31) - [ INFO ]---- --- 正在執行方法4 --- 
2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test5(Log4jDemo.java:35) - [ INFO ]---- --- 正在執行方法5 --- 
2019-07-16 23:03:32 method: cn.xiaobing.web.auto.test.Log4jDemo.test_over(Log4jDemo.java:39) - [ INFO ]---- *** 執行Suite結束 *** 

小結:學習後總結分享,不足之處後續修正;

參考原文地址:https://www.jb51.net/article/134950.htm

相關文章
相關標籤/搜索