轉自:http://blog.csdn.net/hu_shengyang/article/details/6754031
<!-- log4j 系統日誌-->
首先要對配置文件的各個參數進行說明,這樣才能合理的進行配置。
參數意義說明:
配置根Logger
- 其語法爲:
- log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
- level: 是日誌記錄的優先級,分爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或
- 者您定義的級別。Log4j建議只使用四個級別,優 先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裏定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關。比如在這裏定 義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被打印出來。
- appenderName: 就是指定日誌信息輸出到哪個地方。您可以同時指定多個輸出目的地。
- 例如:log4j.rootLogger=info,A1,B2,C3
輸出級別的種類
- OFF 、FATAL 、ERROR、WARN、INFO、DEBUG、TRACE 、ALL
- OFF 爲最高等級 關閉了日誌信息
- FATAL 爲可能導致應用中止的嚴重事件錯誤
- ERROR 爲嚴重錯誤 主要是程序的錯誤
- WARN 爲一般警告,比如session丟失
- INFO 爲一般要顯示的信息,比如登錄登出
- DEBUG 爲程序的調試信息
- TRACE 爲比DEBUG更細粒度的事件信息
- ALL 爲最低等級,將打開所有級別的日誌
配置日誌信息輸出目的地
- log4j.appender.appenderName = fully.qualified.name.of.appender.class
- 1.org.apache.log4j.ConsoleAppender(控制檯)
- 2.org.apache.log4j.FileAppender(文件)
- 3.org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
- 4.org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)
- 5.org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
配置日誌信息的格式
- log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
- 1.org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
- 2.org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
- 3.org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
- 4.org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)
- <strong>控制檯選項</strong>
- Threshold=DEBUG:指定日誌消息的輸出最低層次。
- ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
- Target=System.err:默認情況下是:System.out,指定輸出控制檯
- <strong>FileAppender 選項</strong>
- Threshold=DEBUF:指定日誌消息的輸出最低層次。
- ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
- File=mylog.txt:指定消息輸出到mylog.txt文件。
- Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
- <strong>RollingFileAppender 選項</strong>
- Threshold=DEBUG:指定日誌消息的輸出最低層次。
- ImmediateFlush=true:默認值是true,意謂着所有的消息都會被立即輸出。
- File=mylog.txt:指定消息輸出到mylog.txt文件。
- Append=false:默認值是true,即將消息增加到指定文件中,false指將消息覆蓋指定的文件內容。
- MaxFileSize=100KB: 後綴可以是KB, MB 或者是 GB. 在日誌文件到達該大小時,將會自動滾動,即將原來的內容移到mylog.log.1文件。
- MaxBackupIndex=2:指定可以產生的滾動文件的最大數。
- log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n
日誌信息格式中幾個符號所代表的含義:
- -X號: X信息輸出時左對齊;
- %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字符,就從左邊較遠輸出的字符截掉。
log4j.xml配置如下,log4j.xml存放在WEB-INF目錄下:
- <?xml version="1.0" encoding="GBK" ?>
- <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
- <!-- 輸出日誌到控制檯 ConsoleAppender -->
- <appender name="console"
- class="org.apache.log4j.ConsoleAppender">
- <param name="Threshold" value="info"></param>
- <layout class="org.apache.log4j.TTCCLayout">
- <param name="ConversionPattern" value="TTCCLayout"></param>
- </layout>
- </appender>
- <!-- 輸出日誌到文件 每天一個文件 -->
- <appender name="dailyRollingFile"
- class="org.apache.log4j.DailyRollingFileAppender">
- <param name="Threshold" value="info"></param>
- <param name="ImmediateFlush" value="true"></param>
- <param name="File" value="c:/logs/dailyRollingFile.log"></param>
- <param name="DatePattern" value="'.'yyyy-MM-dd'.log'"></param>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
- </layout>
- </appender>
- <!-- 輸出日誌到文件 文件大小到達指定尺寸的時候產生一個新的文件 -->
- <appender name="railyFile"
- class="org.apache.log4j.RollingFileAppender">
- <param name="File" value="c:/logs/railyFile.log"></param>
- <param name="ImmediateFlush" value="true"/>
- <param name="Threshold" value="info"></param>
- <param name="Append" value="true"></param>
- <param name="MaxFileSize" value="30KB"></param>
- <param name="MaxBackupIndex" value="100"></param>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
- </layout>
- </appender>
- <!-- 輸出日誌到文件 -->
- <appender name="file"
- class="org.apache.log4j.FileAppender">
- <param name="File" value="c:/logs/file.log"></param>
- <param name="Threshold" value="info"></param>
- <layout class="org.apache.log4j.PatternLayout">
- <param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss\} %-5p] [%t] {%c:%L}-%m%n"></param>
- </layout>
- </appender>
- <!--
- 定義全局的日誌輸出級別,但是在輸出目的地的配置中配置的具體輸出級別優先級高於全局定義的優先級。
- 如果在railyFile中定義<param name="Threshold" value="info"></param>,那麼將會把info以上級別的信息輸出
- -->
- <root>
- <priority value="debug" />
- <appender-ref ref="console" />
- <appender-ref ref="dailyRollingFile" />
- <appender-ref ref="railyFile" />
- <appender-ref ref="file" />
- </root>
- </log4j:configuration>
在web.xml中添加log4j.xml配置
- <!-- log4j 系統日誌-->
- <context-param>
- <param-name>log4jConfigLocation</param-name>
- <param-value>/WEB-INF/log4j.xml</param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
- </listener>
對Logger的簡單封裝:
BasicConfigurator.configure();默認先讀取log4j.xml,如果不存在則再讀取log4j.properties.
- public class Log4jUtil {
- private static final String configFile = "log4j.xml";
- static{
- BasicConfigurator.configure();
- }
- public Log4jUtil() {
- super();
- }
- public static String getConfigFile(){
- return configFile;
- }
- public static Logger getLogger(Class clazz){
- return Logger.getLogger(clazz);
- }
- public static Logger getLogger(String strClass){
- return Logger.getLogger(strClass);
- }
- public static Logger getLogger(String strClass,LoggerFactory loggerFactory){
- return Logger.getLogger(strClass, loggerFactory);
- }
- }
最後只需在代碼中調用即可,格式如下:
- public class HelloLog4j {
- private static Logger logger = Logger.getLogger(HelloLog4j.class);
- public String getURL(){
- logger.info("getURL() ... ");
- return null;
- }
- }