最近被問到一個log4j分不同文件記錄不同級別日志的問題,一下給難倒了,以前沒有留意過log4j的具體功能,只是了解了下。如今自己還差的遠(yuǎn)啊。╮(╯▽╰)╭。。。
參考了前段時間的那個項目中的log4j配置文件,發(fā)現(xiàn)那個只不過將不同模組的日志記錄到不同的日志文件。并未按日志級別分文件記錄。自己在動手調(diào)試的過程中結(jié)合查閱網(wǎng)上很多博文,終于以xml格式配置的方式調(diào)通。具體配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta./log4j/'>
<appender name="stdout" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss.sss} [%-5p] %c - %m%n"/>
</layout>
</appender>
<appender name="traceLog4Debug" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/traceLog4Debug.log"/>
<param name="maxFileSize" value="2000KB"/>
<param name="maxBackupIndex" value="20"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss.sss} [%-5p] %c - %m%n"/>
</layout>
</appender>
<appender name="debugLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/debug.log"/>
<param name="maxFileSize" value="2000KB"/>
<param name="maxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss.sss} [%-5p] %c - %m%n"/>
</layout>
<!-- filter作用? 配置LevelMax與LevelMin限定輸出到文件的日志級別 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="DEBUG" />
<param name="LevelMin" value="DEBUG" />
</filter>
</appender>
<appender name="infoLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/info.log"/>
<param name="maxFileSize" value="2000KB"/>
<param name="maxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss.sss} [%-5p] %c - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="INFO" />
<param name="LevelMin" value="INFO" />
</filter>
</appender>
<appender name="warnLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/warn.log"/>
<param name="maxFileSize" value="2000KB"/>
<param name="maxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss.sss} [%-5p] %c - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="WARN" />
<param name="LevelMin" value="WARN" />
</filter>
</appender>
<appender name="errorLog" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/error.log"/>
<param name="maxFileSize" value="2000KB"/>
<param name="maxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy/MM/dd HH:mm:ss.sss} [%-5p] %c - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMax" value="ERROR" />
<param name="LevelMin" value="ERROR" />
</filter>
</appender>
<!-- 記錄該包下所有日志 -->
<logger name="com.javaeye.paopaohou">
<level value="ALL"/>
<appender-ref ref="stdout"/>
<appender-ref ref="traceLog4Debug"/>
<appender-ref ref="debugLog"/>
<appender-ref ref="infoLog"/>
<appender-ref ref="warnLog"/>
<appender-ref ref="errorLog"/>
</logger>
<logger name="org.hibernate.SQL">
<level value="DEBUG"/>
<appender-ref ref="traceLog4Debug"/>
<appender-ref ref="stdout"/>
</logger>
<logger name="org.hibernate">
<level value="error"/>
<appender-ref ref="traceLog4Debug"/>
<appender-ref ref="stdout"/>
</logger>
<logger name="org.springframework">
<level value="error"/>
<appender-ref ref="traceLog4Debug"/>
<appender-ref ref="stdout"/>
</logger>
</log4j:configuration>
只不過是在配置appender的時候配置了一個LevelRangeFilter的filter,并配置LevelMax與LevelMin(最大最小級別),加個測試類:
- package com.javaeye.paopaohou;
-
- import org.apache.log4j.Logger;
-
- public class TestLog4j {
-
- private static final Logger log = Logger.getLogger(TestLog4j.class);
-
-
-
-
-
- public static void main(String[] args) {
- log.debug("debug...");
- log.info("info...");
- log.warn("warn...");
- log.error("error...");
-
- }
-
- }
package com.javaeye.paopaohou;
import org.apache.log4j.Logger;
public class TestLog4j {
private static final Logger log = Logger.getLogger(TestLog4j.class);
/**
* 測試log4j不同級別日志分文件記錄
*
*/
public static void main(String[] args) {
log.debug("debug...");
log.info("info...");
log.warn("warn...");
log.error("error...");
}
}
這樣就可以將不同級別的日志記錄到不同的文件,可惜使用properties格式的log4j配置文件卻沒有調(diào)通。是因為properties格式的文件不支持這么配置嗎?不知道哪位在使用properties文件時候這么做過,還有我發(fā)現(xiàn)我經(jīng)歷的項目都使用xml格式的配置文件好像多于properties格式的文件,是因為xml格式配置起來更靈活嗎?學(xué)習(xí)。