Log4j參數說明及常用案例

Log4j

0:導入jar包及log4j.properties配置文件

 

1:log4j 格式詳解

1.1:日誌級別

log4j.rootLogger=, 

日誌級別:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不區分大小寫

CONSOLE:控制檯

注意,需在控制檯輸入,只需將其中一個appender定義爲stdout即可

注意,rootLogger默認是對整個工程生效

注意,如果只想對某些包操作,那麼:log4j.logger.com.hutu=info, stdout,表示該日誌對package com.hutu生效

注意,這樣做可以區分dev/線上,也可以減小性能影響:if(log.isDebugEnabled()){log.debug();}

注意,如果末尾爲R,則以、隔開。如log4j.rootLogger=ERRORWARNINFODEBUG,R

注意,如果沒有爲R,則以,隔開。如log4j.rootLogger=ERROR,WARN,INFO,stdout

1.2:日誌輸出類型

log4j.appender.appender1 = org.apache.log4j.[控制檯|文件|每天日誌文件|按文件大小創建|...]

1.2.1:ConsoleAppender(控制檯)

Ø Threshold=WARN:指定日誌消息的輸出最低層次。 

Ø ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。 

Ø Target=System.err:默認情況下是:System.out,指定輸出控制檯 

1.2.2:FileAppender(文件)

Ø Threshold=WARN:指定日誌消息的輸出最低層次。 

Ø ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。

Ø File=mylog.txt:指定消息輸出到mylog.txt文件。 

Ø Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。

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

1.2.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:指定可以產生的滾動文件的最大數。 

1.2.5:WriteAppender(將日誌信息以流格式發送到任意指定的地方)

1.2.6:JDBCAppender(將日誌信息保存到數據庫中)

配置參數詳見<使用場景 2.4>

1.2.7:JDBCAppender(將日誌發送到郵箱)

配置參數詳見<使用場景 2.3>

1.3:日誌輸出路徑

log4j.appender.appender1.File=[下列參考]

#0:絕對路徑:f:/logs/backup.log

#1:相對路徑${user.home}/logs/backup.log

#2:相對路徑:/logs/backup.log

#3:發佈到Tomcat下後的相對路徑:${catalina.home}/webapps/項目名稱/logs/backup.log,

#4:直接在tomcat/bin/startup.bat啓動,根路徑開始爲tomcat/bin目錄)

1.4:日誌佈局格式

log4j.appender.appender1.layout=org.apache.log4j.[HTMLLayout | SimpleLayout | TTCCLayout]

Ø HTMLLayout(以HTML表格形式佈局)

Ø SimpleLayout(包含日誌信息的級別和信息字符串)

Ø TTCCLayout(包含日誌產生的時間,執行緒,類別等信息)

Ø PatternLayout(可以靈活的指定佈局格式,常用)

1.5:日誌輸出格式

log4j.appender.appender1.layout.ConversionPattern=[下列參考]

例如,%d - %m%n%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

%c 輸出日誌信息所屬的類的全名

%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也可以在其後指定格式,比如:%d{yyy-M-dd HH:mm:ss },輸出類似:2002-10-18- 221028

%f 輸出日誌信息所屬的類的類名

%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行

%m 輸出代碼中指定的信息,如log(message)中的message

%n 輸出一個回車換行符,Windows平臺爲“rn”,Unix平臺爲“n

%p 輸出優先級,即DEBUGINFOWARNERRORFATAL。如果是調用debug()輸出的,則爲DEBUG,依此類推

%r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數

%t 輸出產生該日誌事件的線程名

可參考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html

1.6:其他配置

log4j.logger.org.springframework=OFF  

log4j.logger.org.apache.struts2=OFF  

log4j.logger.com.opensymphony.xwork2=OFF  

log4j.rootLogger=INFO,Error,stdout  #c3p0的日誌信息關閉,但要求將所有R改爲stdout

可參考

http://blog.csdn.net/projava/article/details/7344839 

1.7:總結一下:

Logger類:完成日誌記錄,設置日誌信息級別

Appender類:決定日誌去向,終端、DB、硬盤

Layout類:決定日誌輸出的樣式,例如包含當前線程、行號、時間

2:使用場景

2.1:按日期產生日誌文件

#設置日誌的級別 ,多個以、分開(沒有給出的,則不會被輸出)

log4j.rootLogger=ERRORWARNINFODEBUG,R

 

#DailyRollingFileAppender每天產生一個日誌文件

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender

 

#設置日誌文件保存路徑

log4j.appender.R.File=log/backup.log

 

#日誌輸出格式

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%c]-[%p] %m%n

 

#設置日誌文件後綴名,決定着多長時間創建一個新的文件!yyyyMMdd每天一個,yyyyMMddHH第小時一個,...

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

 

#日誌佈局格式

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

 

2.2:按文件大小產生日誌文件

#設置日誌的級別 ,多個以、分開(沒有給出的,則不會被輸出)

log4j.rootLogger=ERRORWARNINFODEBUG,R

 

#RollingFileAppender:文件大小到達指定尺寸時產生一個新的文件

log4j.appender.R=org.apache.log4j.RollingFileAppender

 

#設置日誌文件保存路徑 

log4j.appender.R.File=log/backup.log

 

#超出設置的大小,則將其以[文件名稱+序號]備份後,再寫入。

log4j.appender.R.MaxFileSize=3KB

 

#設置日誌文件備份的最大序號

log4j.appender.R.MaxBackupIndex=10

 

#日誌輸出格式 

log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

 

#日誌佈局格式

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

2.3:日誌發到郵箱  

2.3.1:依賴包3個包

Ø log4j-1.2.15.jar(版本低於log4j-1.2.14.jar不支持SMTP認證) 

Ø mail.jar 

Ø activation.jar 

2.3.2:測試環境是否能發送郵件

import org.apache.log4j.Logger;

import org.apache.log4j.PatternLayout;

import org.apache.log4j.net.SMTPAppender;

 

public class TestLog4jSendMail {

static Logger logger = Logger.getLogger(TestLog4jSendMail.class);

SMTPAppender appender = new SMTPAppender();

public TestLog4jSendMail() {

try {

appender.setSMTPUsername("username");

appender.setSMTPPassword("password");

appender.setTo("[email protected]");

appender.setFrom("[email protected]");

// SMTP服務器 smtp.163.com

appender.setSMTPHost("smtp.163.com");

appender.setLocationInfo(true);

appender.setSubject("Test Mail From Log4J");

appender.setLayout(new PatternLayout());

appender.activateOptions();

logger.addAppender(appender);

logger.error("Hello World");

} catch (Exception e) {

e.printStackTrace();

logger.error("Printing ERROR Statements", e);

}

}

public static void main(String args[]) {

new TestLog4jSendMail();

}

}

2.3.3:配置文件

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

日誌的錯誤級別

log4j.appender.MAIL.Threshold=ERROR,INFO,DEBUG

緩存文件大小,日誌達到512K時發送Email

#log4j.appender.MAIL.BufferSize=10

發送郵件的服務器(smtp.163.com)

log4j.appender.MAIL.SMTPHost=smtp.163.com

#郵件主題

log4j.appender.MAIL.Subject=ErrorMessage

#發送郵件箱的用戶

[email protected]

#發送郵件箱的密碼

log4j.appender.MAIL.SMTPPassword=xxx

#發送郵件箱

[email protected]

#接受郵件箱

[email protected]

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

 

#在com.study.logMail包下面的ERROR級別以上的log都是採用郵件發送

log4j.logger.com.study.logMail = ERROR,MAIL 

2.3.4:反饋如下

 

 

2.4:日誌保存到數據庫

2.4.1:創建數據庫或表

CREATE DATABASE log4jdb

 

CREATE TABLE RESLOG (

 createTime VARCHAR(20), #日誌記錄時間

 threadVARCHAR(200),#線程名稱

 levelText VARCHAR(100),#日誌級別(INFODEBUGERROR)

 logclass VARCHAR(1000),#發生事件的類全路徑

 message VARCHAR(4000),#日誌消息

 username VARCHAR(4000)  #用戶

 )#

2.4.2配置參數

#設置捕獲的級別

log4j.rootLogger=ERRORWARNINFODEBUG,DATABASE

#設置爲日誌保存到數據庫

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

#這個配置是告訴LOG4J,有多少條日誌信息後才存入數

#數據庫連接字符串據庫,我這裏是1,就是說有一條就查一條,顯然這樣在生產環境下是很影響系統性能的。

log4j.appender.db.BufferSize=10

#數據庫連接字符串

log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/log4jdb

#數據庫驅動,要求導入jar!!!

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

#數據庫用戶名

log4j.appender.DATABASE.user=root

#數據庫密碼

log4j.appender.DATABASE.password=123456

#這個配置是告訴當LOG4J吧日誌存儲數據庫時用的SQL語句。SQ_RESLOG_LOGID.Nextval是我建的一個SEQUENCE;‘%C’是日誌中的CLASS;‘%M’是打印日誌是執行到類裏的方法;‘%d’是打印的時間,它支持格式化;‘%P’是日誌級別,包括INFODEBUGERROR等;‘%m’是MSG,日誌內容。注意這裏的參數區分大小寫。

log4j.appender.DATABASE.sql=INSERT INTO RESLOG (createTime,thread,levelText,logclass,message,username) values ('%d{yyyy-MM-dd HH:mm:ss}', '%t', '%p', '%l', '%m','%X{user}') 

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

 

2.4.3:結果

 

2.5:日誌應用於socket

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender

#設置服務端的ip

log4j.appender.SOCKET.RemoteHost=localhost

#設置端口號

log4j.appender.SOCKET.Port=5001 

log4j.appender.SOCKET.LocationInfo=true

# Set up for Log Facter 5

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

log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread]%n%c[CATEGORY]%n%m[MESSAGE]%n%n

# Log Factor 5 Appender

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

log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000

2.6:應用於控制檯

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.Threshold=DEBUG

log4j.appender.CONSOLE.Target=System.out

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

log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[thread] n%c[CATEGORY]%n%m[MESSAGE]%n%n

2.7:應用於文件回滾

log4j.rootLogger=DEBUG,CONSOLE,A1,im

log4j.addivity.org.apache=true

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

log4j.appender.ROLLING_FILE.Threshold=ERROR

log4j.appender.ROLLING_FILE.File=rolling.log //文件位置,也可以用變量${java.home}rolling.log

log4j.appender.ROLLING_FILE.Append=true //true:添加 false:覆蓋

log4j.appender.ROLLING_FILE.MaxFileSize=10KB //文件最大尺寸

log4j.appender.ROLLING_FILE.MaxBackupIndex=1 //備份數

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

log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章