1. 程式人生 > >springmvc 專案完整示例06 日誌–log4j 引數詳細解析 log4j如何配置

springmvc 專案完整示例06 日誌–log4j 引數詳細解析 log4j如何配置

Log4j由三個重要的元件構成:

日誌資訊的優先順序

日誌資訊的輸出目的地

日誌資訊的輸出格式

日誌資訊的優先順序從高到低有ERROR、WARN、 INFO、DEBUG,分別用來指定這條日誌資訊的重要程度;

日誌資訊的輸出目的地指定了日誌將列印到控制檯還是檔案中;

而輸出格式則控制了日誌資訊的顯 示內容。

Log4j支援兩種配置檔案格式

一種是XML格式的檔案,一種是Java特性檔案(鍵=值)。

下面我們介紹使用Java特性檔案做為配置檔案的方法:

1.配置根Logger,其語法為:

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

比如我們的就是

log4j.rootLogger = DEBUG,stdout,D

appenderName就是一個名字哈,你可以定義你自己的,不是說就要這樣子的,不過要跟下面使用的時候對應上就好了

其中,level 是日誌記錄的優先順序,分為OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定義的級別。

Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。

通過在這裡定義的級別,您可以控制到應用程式中相應級別的日誌資訊的開關。

比如在這裡定 義了INFO級別,則應用程式中所有DEBUG級別的日誌資訊將不被打印出來。 

appenderName就是指日誌資訊輸出到哪個地方。您可以同時指定多個輸出目的地。

2.配置日誌資訊輸出目的地Appender,其語法為:

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

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

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

(1)ConsoleAppender選項:

Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。

ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。

Target=System.err:預設值是System.out。

(2)FileAppender選項:

Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。

ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。

Append=false:true表示訊息增加到指定檔案中,false則將訊息覆蓋指定的檔案內容,預設值是true。

File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j檔案中。

(3)DailyRollingFileAppender選項:

Threshold=WARN:指定日誌資訊的最低輸出級別,預設為DEBUG。

ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。

Append=false:true表示訊息增加到指定檔案中,false則將訊息覆蓋指定的檔案內容,預設值是true。

File=D:/logs/logging.log4j:指定當前訊息輸出到logging.log4j檔案中。

DatePattern='.'yyyy-MM:每月滾動一次日誌檔案,即每月產生一個新的日誌檔案。當前月的日誌檔名為logging.log4j,前一個月的日誌檔名為logging.log4j.yyyy-MM。

另外,也可以指定按周、天、時、分等來滾動日誌檔案,對應的格式如下:

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:指定日誌資訊的最低輸出級別,預設為DEBUG。

ImmediateFlush=true:表示所有訊息都會被立即輸出,設為false則不輸出,預設值是true。

Append=false:true表示訊息增加到指定檔案中,false則將訊息覆蓋指定的檔案內容,預設值是true。

File=D:/logs/logging.log4j:指定訊息輸出到logging.log4j檔案中。

MaxFileSize=100KB:字尾可以是KB, MB 或者GB。在日誌檔案到達該大小時,將會自動滾動,即將原來的內容移到logging.log4j.1檔案中。

MaxBackupIndex=2:指定可以產生的滾動檔案的最大數,例如,設為2則可以產生logging.log4j.1,logging.log4j.2兩個滾動檔案和一個logging.log4j檔案。

我們的

log4j.appender.stdout = org.apache.log4j.ConsoleAppender

就是指定到控制檯的 =左邊的stdout就是我們定義的名字,後面就是型別嘛

說白了就是

log4j.appender.appenderName=appender的型別

這樣子就指定了輸入的目的地了

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有以e幾種:

org.apache.log4j.HTMLLayout(以HTML表格形式佈局),  
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),  
org.apache.log4j.SimpleLayout(包含日誌資訊的級別和資訊字串),  
org.apache.log4j.TTCCLayout(包含日誌產生的時間、執行緒、類別等等資訊)

(1)HTMLLayout選項:

LocationInfo=true:輸出java檔名稱和行號,預設值是false。

Title=My Logging: 預設值是Log4J Log Messages。

(2)PatternLayout選項:

ConversionPattern=%m%n:設定以怎樣的格式顯示訊息。

Log4J採用類似C語言中的printf函式的列印格式格式化日誌資訊,列印引數如下: %m 輸出程式碼中指定的訊息

%p 輸出優先順序,即DEBUG,INFO,WARN,ERROR,FATAL  
%r 輸出自應用啟動到輸出該log資訊耗費的毫秒數  
%c 輸出所屬的類目,通常就是所在類的全名  
%t 輸出產生該日誌事件的執行緒名  
%n 輸出一個回車換行符,Windows平臺為“rn”,Unix平臺為“n”  
%d 輸出日誌時間點的日期或時間,預設格式為ISO8601,也可以在其後指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},輸出類似:2002年10月18日 22:10:28,921  
%l 輸出日誌事件的發生位置,包括類目名、發生的執行緒,以及在程式碼中的行數。舉例:Testlog4.main(TestLog4.java:10)

說到這個地方,來點總結性的

我們以我們的例子說

### 輸出到控制檯 ###

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] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n

其實就相當於你定義了一個方式,這個方式你自己要有一個名字

他就是最開始

log4j.rootLogger = DEBUG,stdout,D 這個地方的   ,  第一個逗號後面的這些個名字,他就是appenderName

你需要,指定他的輸出目的

也即是

log4j.appender.stdout = 目的地

然後是剩下的一些引數,配置一下

就這樣子而已

具體的引數,以及引數的值,查查文件,百度一下就出來了

再囉嗦一點幾個引數

比如說你想某種方式只是輸出某種級別,比如說你想只是把error輸出到檔案

那麼你可以指定

log4j.appender.D.Threshold = ERROR ## 只輸出ERROR級別以上的日誌!!!

這個Threshold  就控制了這個

#附:Log4j比較全面的配置

#Log4j配置檔案實現了輸出到控制檯、檔案、回滾檔案、傳送日誌郵件、輸出到資料庫日誌表、自定義標籤等全套功能。

log4j.rootLogger=DEBUG,console,dailyFile,im

log4j.additivity.org.apache=true

# 控制檯(console)

log4j.appender.console=org.apache.log4j.ConsoleAppender

log4j.appender.console.Threshold=DEBUG

log4j.appender.console.ImmediateFlush=true

log4j.appender.console.Target=System.err

log4j.appender.console.layout=org.apache.log4j.PatternLayout

log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 日誌檔案(logFile)

log4j.appender.logFile=org.apache.log4j.FileAppender

log4j.appender.logFile.Threshold=DEBUG

log4j.appender.logFile.ImmediateFlush=true

log4j.appender.logFile.Append=true

log4j.appender.logFile.File=D:/logs/log.log4j

log4j.appender.logFile.layout=org.apache.log4j.PatternLayout

log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 回滾檔案(rollingFile)

log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender

log4j.appender.rollingFile.Threshold=DEBUG

log4j.appender.rollingFile.ImmediateFlush=true

log4j.appender.rollingFile.Append=true

log4j.appender.rollingFile.File=D:/logs/log.log4j

log4j.appender.rollingFile.MaxFileSize=200KB

log4j.appender.rollingFile.MaxBackupIndex=50

log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout

log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 定期回滾日誌檔案(dailyFile)

log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.dailyFile.Threshold=DEBUG

log4j.appender.dailyFile.ImmediateFlush=true

log4j.appender.dailyFile.Append=true

log4j.appender.dailyFile.File=D:/logs/log.log4j

log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd

log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout

log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 應用於socket

log4j.appender.socket=org.apache.log4j.RollingFileAppender

log4j.appender.socket.RemoteHost=localhost

log4j.appender.socket.Port=5001

log4j.appender.socket.LocationInfo=true

# Set up for Log Factor 5

log4j.appender.socket.layout=org.apache.log4j.PatternLayout

log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# Log Factor 5 Appender

log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender

log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

# 傳送日誌到指定郵件

log4j.appender.mail=org.apache.log4j.net.SMTPAppender

log4j.appender.mail.Threshold=FATAL

log4j.appender.mail.BufferSize=10

log4j.appender.mail.From = [email protected]

log4j.appender.mail.SMTPHost=mail.com

log4j.appender.mail.Subject=Log4J Message

log4j.appender.mail.To= [email protected]

log4j.appender.mail.layout=org.apache.log4j.PatternLayout

log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 應用於資料庫

log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.database.URL=jdbc:mysql://localhost:3306/test

log4j.appender.database.driver=com.mysql.jdbc.Driver

log4j.appender.database.user=root

log4j.appender.database.password=

log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')

log4j.appender.database.layout=org.apache.log4j.PatternLayout

log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

# 自定義Appender

log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender

log4j.appender.im.host = mail.cybercorlin.net

log4j.appender.im.username = username

log4j.appender.im.password = password

log4j.appender.im.recipient = [email protected]

log4j.appender.im.layout=org.apache.log4j.PatternLayout

log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

spring原理 實踐解析-簡單的helloworld

springmvc整合mybatis完整專案示例

maven專案整合springmvc整合mybatis