Log4j 是Apache的一個開放源代碼項目,經過使用Log4j,咱們能夠控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接口服務器、NT的事 件記錄器、UNIX Syslog守護進程等;咱們也能夠控制每一條日誌的輸出格式;經過定義每一條日誌信息的級別,咱們可以更加細緻地控制日誌的生成過程。最使人感興趣的就 是,這些能夠經過一個配置文件來靈活地進行配置,而不須要修改應用的代碼。java 如此強大的優越性,實際上手並不難,尤爲在spring框架下,使用log4j更是容易,下面介紹一下spring下的log4j應用。web 固然先要下載相應的jar包(log4j.jar)spring 首先是web.xml的配置,在web.xml中加入以下配置數據庫 <context-param> |
<listener>
<listener-class>
org.springframework.web.util.Log4jConfigListener
</listener-class>
</listener>tomcat
說明: 在上文的配置裏,在上文的配置裏,Log4jConfigListener會去WEB- INF/props/log4j.propeties 讀取配置文件;開一條watchdog線程每60秒掃描一下配置文件的變化(這樣在web服務啓動後再去修改配置文件也不用從新啓動web服務了);並把 web目錄的路徑壓入一個叫webapp.root的系統變量(webapp.root將在log4j.properties文件中使用)。服務器
接下來是log4j.properties配置文件了,把它放在WEB-INF/props下,具體配置以下:app
#log4j.rootLogger = [ level ] , appenderName, appenderName, ...
log4j.rootLogger = INFO, console, R
#level=INFO,all can be output
#console is set to be a ConsoleAppender
log4j.appender.console = org.apache.log4j.ConsoleAppender
#console have four patterns
#org.apache.log4j.HTMLLayout
#org.apache.log4j.PatternLayout
#org.apache.log4j.SimpleLayout
#org.apache.log4j.TTCCLayout
log4j.appender.console.layout = org.apache.log4j.PatternLayout
#define the output type
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
#file is set to output to a extra file
log4j.appender.R = org.apache.log4j.RollingFileAppender
#the absolute route of the log4j file
log4j.appender.R.File = /log.txt
#the size
log4j.appender.R.MaxFileSize = 500KB
#back up a file
log4j.appender.R.MaxBackupIndex = 1
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n框架
上面的配置文件說明log信息將以兩種方式輸出(文件和控制檯),表示應用的根目錄下(例如本應用名稱爲ABC,則log.txt的位置爲tomact\webapp\ABC下)webapp
最後在程序中想要輸出log的地方加入log4j的支持
(1)引入 import org.apache.log4j.Logger
(2)聲明一個logger
private static Logger logger = Logger.getLogger(ClassName.class);
(3)在程序中的相應位置加入輸出信息
logger.info("用戶登陸:"+user.getAccount());
ok,完成了,當有登陸時會在控制檯和文件中同時輸出log信息以下
2007-01-10 16:02:54 [com.my.web.UserAction]-[INFO] 用戶登陸:yangsq
ps:
做爲一個流行的日誌記錄工具,Log4j是java開源項目中最閃亮的環節之一。究其緣由,有如下幾點:
a)Log4j受大多數web應用服務器的擁護:以我目前所知,tomcat,weblogic,websphere,jboss都支持log4j。
b)快速,功能強大:Log4J配置文件實現了輸出到控制檯、文件、回滾文件、發送日誌郵件、輸出到數據庫日誌表、自定義標籤等全套功能。在速度上,從log4j一開始出現,注重運行的速度就一直放在首位,而且堅持不懈地進行着改進和完善。
c)使用簡單、方便:只須要導入一個簡單的log4j-1.2.x.jar,而後在程序類的開頭寫上下面一句private final static Logger log =Logger.getLogger(ClassName.class);
這樣你就獲得了一個日誌對象log,能夠輕鬆往特定目標寫日誌了。
爲何須要Log4j?---項目的調試是log4j產生的內在驅動力
原始的方法是:把信息輸出到屏幕(console),利用JDK提供的System.out.println。可是,這樣作的壞處是顯而易見的:
a)信息的輸出不夠靈活,而且繁瑣。好比,要輸出執行處的文件名,行數,當前時間等,println顯得很原始。
b)若是要改變輸出的內容和格式,須要從新編譯源程序。
c)更嚴重的是,若是程序中有不少的println,會嚴重的影響程序的性能。
Log4j使用的幾個關鍵點?
根記錄器(rootLogger),輸出端(appenders)和佈局(layouts)
a)定義根記錄器的格式爲
log4j.rootLogger = [ level ], appendName1, appendName2, …appendNameN。同一個記錄器可有多個輸出端。
PS:level的級別(此級別能夠自定義,系統默認提供瞭如下級別)
◆debug//調試信息
◆info//通常信息
◆warn//警告信息
◆error//錯誤信息
◆fatal//致命錯誤信息
上面列出的就是所謂log4j的輸出級別,log4j建議只使用4個級別,它們從上到下分別爲ERROR、WARN、INFO、DEBUG,假設你定義的級別是info,那麼error和warn的日誌能夠顯示而比他低的debug信息就不顯示了。
b)定義一個appender的輸出目的地的格式爲
log4j.appender.appenderName = fully.qualified.name.of.appender.class。log4j提供瞭如下幾種經常使用的輸出目的地:
◆org.apache.log4j.ConsoleAppender,將日誌信息輸出到控制檯
◆org.apache.log4j.FileAppender,將日誌信息輸出到一個文件
◆org.apache.log4j.DailyRollingFileAppender,將日誌信息輸出到一個,而且天天輸出到一個新的日誌文件
◆org.apache.log4j.RollingFileAppender,將日誌信息輸出到一個文件,經過指定文件的的尺寸,當文件大小到達指定尺寸的時候會自動把文件更名,如名爲example.log的文件會更名爲 example.log.1,同時產生一個新的example.log文件。若是新的文件再次達到指定尺寸,又會自動把文件更名爲 example.log.2,同時產生一個example.log文件。依此類推,直到example.log. MaxBackupIndex, MaxBackupIndex的值可在配置文件中定義。
◆org.apache.log4j.WriterAppender,將日誌信息以流格式發送到任意指定的地方。
◆org.apache.log4j.jdbc.JDBCAppender,經過JDBC把日誌信息輸出到數據庫中。
c)輸出格式(佈局)layout
Log4j提供了一下幾種佈局:
◆org.apache.log4j.HTMLLayout,以HTML表格形式佈局
◆org.apache.log4j.PatternLayout,能夠靈活地指定佈局模式
◆org.apache.log4j.SimpleLayout,包含日誌信息的級別和信息字符串
定義一個PatternLayout佈局的語句爲:
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1} - %m%n
PS:ConversionPattern參數的格式含義
%c 輸出日誌信息所屬的類的全名
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy-MM-dd HH:mm:ss },輸出相似:2002-10-18- 22:10:28
%f 輸出日誌信息所屬的類的類名
%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
%m 輸出代碼中指定的信息,如log(message)中的message
%n 輸出一個回車換行符,Windows平臺爲「\r\n」,Unix平臺爲「\n」
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。若是是調用debug()輸出的,則爲DEBUG,依此類推
%r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名
log4j的配置文件:log4j.properties
一個log4j.properties文件示例
log4j.rootLogger=INFO, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=/webserver/specialTraining3/wangzj.log
log4j.appender.logfile.MaxFileSize=51200KB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n