例子:java
<?xml version="1.0" encoding="GB2312" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!--#log4j中有5級logger ,#FATAL 0 ,#ERROR 3 ,#WARN 4 ,#INFO 6 ,#DEBUG 7 -->
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>mysql
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n" />
</layout>
</appender>
<appender name="debugFile" class="org.apache.log4j.RollingFileAppender">
<!-- 設置日誌輸出文件名 -->
<param name="File" value="D:/ci/log/samples-qui/szycj_debug.log" />
<param name="MaxFileSize" value="20480KB" />
<param name="MaxBackupIndex" value="10" />
<!-- 設置是否在從新啓動服務時,在原有日誌的基礎添加新日誌 -->
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yy/MM/dd HH\:mm\:ss\:SSS} %5p %c{1}\:%L ]\: %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="warn" />
</filter>
</appender>
<appender name="errorFile" class="org.apache.log4j.RollingFileAppender">
<!-- 設置日誌輸出文件名 -->
<param name="File" value="D:/ci//log/samples-qui/szycj_error.log" />
<param name="MaxFileSize" value="10240KB" />
<param name="MaxBackupIndex" value="10" />
<!-- 設置是否在從新啓動服務時,在原有日誌的基礎添加新日誌 -->
<param name="Append" value="false" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{yy/MM/dd HH\:mm\:ss\:SSS} %5p %c{1}\:%L ]\: %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="warn" />
<param name="LevelMax" value="error" />
</filter>
</appender>
<category name="com.fencer" additivity="false">
<priority value="debug" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="debugFile" />
<appender-ref ref="errorFile" />
</category>
<category name="java.sql" additivity="false">
<priority value="debug" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="File" />
</category>web
<root>
<level value="debug" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="debugFile" />
<appender-ref ref="errorFile" />
</root>sql
</log4j:configuration>數據庫
logger.error(e.getMessage);打印的是message ,若是是null 的錯誤,視覺上什麼都沒有apache
logger.error("Error",e);打印的是堆棧的信息,會打印整個信息app
-------------------------------------------------------------------------------------------
Log4j介紹
Log4j由三個重要的組件構成:日誌信息的優先級 priority,日誌信息的輸出目的地Appender,日誌信息的輸出格式(佈局)layout。
一、日誌的優先級,
從低到高,依次有:DEBUG,INFO,WARN,ERROR,分別用來指定這條日誌信息的重要程度;若是定義了了輸入的級別爲INFO,則只有等於及高於這個級別的才進行處理,此時將輸入INFO,WARN,ERROR。值得注意的是,級別中還有兩個關鍵字,
ALL:打印全部的日誌,
OFF:關閉全部的日誌輸出。
二、輸出端 Appenderwebapp
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把日誌信息輸出到數據庫中。
org.apache.log4j.net.SMTPAppender,將日誌信息以郵件的方式發送到指定的郵箱。socket
三、輸出格式(佈局)layout
經過appender能夠控制輸出的目的地,而若是要控制輸出的格式,就可經過log4j的layout組件來實現。經過配置文件定義一個appender的輸出格式,Log4j提供的佈局模式有如下幾種:
org.apache.log4j.ConsoleAppender,輸出到控制檯
org.apache.log4j.HTMLLayout,以HTML表格形式佈局
org.apache.log4j.PatternLayout,能夠靈活地指定佈局模式
org.apache.log4j.SimpleLayout,包含日誌信息的級別和信息字符串佈局
值得一提的是org.apache.log4j.PatternLayout 以Pattern方式的佈局,使用Pattern的方式來指定佈局。
pattern 的參數以下:ConversionPattern參數的格式含義
格式名 含義
%c 輸出日誌信息所屬的類的全名
%d 輸出日誌時間點的日期或時間,默認格式爲ISO8601,也能夠在其後指定格式,好比:%d{yyy-MM-dd HH:mm:ss },輸出相似:2002-10-18- 22:10:28 ;好比 %d{HH:mm:ss,SSS} 或 %d{dd MMM yyyy HH:mm:ss,SSS}.
格式能夠參考 java類 SimpleDateFormat,不過 按照此類的設置會影響速度。你能夠選擇更快的方式 %d{ISO8601},%d{ABSOLUTE}, %d{RELATIVE}.或者使用log4j的ISO8601DateFormat, AbsoluteTimeDateFormat,RelativeTimeDateFormat 和 DateTimeDateFormat 方式.
%f 輸出日誌信息所屬的類的類名
%l 輸出日誌事件的發生位置,即輸出日誌信息的語句處於它所在的類的第幾行
%m 輸出代碼中指定的信息,如log(message)中的message
%M 輸出日誌信息中所發生的方法名。
%n 輸出一個回車換行符,Windows平臺爲「\r\n」,Unix平臺爲「\n」
%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL。若是是調用debug()輸出的,則爲DEBUG,依此類推
%r 輸出自應用啓動到輸出該日誌信息所耗費的毫秒數
%t 輸出產生該日誌事件的線程名
(一) 使用
一、 下載log4j的jar文件,複製到你的web-inf目錄下
二、 寫配置文件log4j.properties,放到src目錄下:
#設置log4j兩個重要的參數:輸出級別(ERROR)、輸出目的地(CONSOLE,DailyRolling) log4j.rootLogger=ERROR,FILE 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
#應用於文件 log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=d:/CGGMLog.log #log4j.appender.FILE.File=${webappHome}/WEB-INF/logs/CGGMLog.log log4j.appender.FILE.Append=true log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n # Use this layout for LogFactor 5 analysis
# 應用於文件回滾 log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=../webapps/OFMP/rolling.log log4j.appender.ROLLING_FILE.Append=true 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
# 用於按時間滾動的文件 log4j.appender.DailyRolling=org.apache.log4j.DailyRollingFileAppender log4j.appender.DailyRolling.File=../webapps/fund/SampleMessages.log4j log4j.appender.DailyRolling.DatePattern=yyyyMMdd-HH'.log4j' log4j.appender.DailyRolling.layout=org.apache.log4j.xml.XMLLayout
#應用於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 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
# 發送日誌給郵件 log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=web@www.wuset.com log4j.appender.MAIL.SMTPHost=www.wusetu.com log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To=web@www.wusetu.com log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%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 ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%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 = corlin@cybercorlin.net log4j.appender.im.layout=org.apache.log4j.PatternLayout log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n |