最近被問到一個(gè)log4j分不同文件記錄不同級(jí)別日志的問題,一下給難倒了,以前沒有留意過log4j的具體功能,只是了解了下。如今自己還差的遠(yuǎn)啊。╮(╯▽╰)╭。。。 參考了前段時(shí)間的那個(gè)項(xiàng)目中的log4j配置文件,發(fā)現(xiàn)那個(gè)只不過將不同模組的日志記錄到不同的日志文件。并未按日志級(jí)別分文件記錄。自己在動(dòng)手調(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.apache.org/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限定輸出到文件的日志級(jí)別 -->
<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的時(shí)候配置了一個(gè)LevelRangeFilter的filter,并配置LevelMax與LevelMin(最大最小級(jí)別),加個(gè)測(cè)試類:
package com.javaeye.paopaohou; import org.apache.log4j.Logger; public class TestLog4j { private static final Logger log = Logger.getLogger(TestLog4j.class); /** * 測(cè)試log4j不同級(jí)別日志分文件記錄 * */ public static void main(String[] args) { log.debug("debug..."); log.info("info..."); log.warn("warn..."); log.error("error..."); } } 這樣就可以將不同級(jí)別的日志記錄到不同的文件,可惜使用properties格式的log4j配置文件卻沒有調(diào)通。是因?yàn)閜roperties格式的文件不支持這么配置嗎?不知道哪位在使用properties文件時(shí)候這么做過,還有我發(fā)現(xiàn)我經(jīng)歷的項(xiàng)目都使用xml格式的配置文件好像多于properties格式的文件,是因?yàn)閤ml格式配置起來更靈活嗎?學(xué)習(xí)。 | |
聯(lián)系客服