首页 > 代码库 > Log4j 分级输出

Log4j 分级输出

一直以来,我都以为Log4j仅能配置输出日志的最低等级,不能限定只输出某一/某些特定等级,今天,无意中发现了其实是可以的. 先上一份普通的log4j.properties

log4j.rootLogger=INFO, Console, File###### Console appender definition #######log4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %x %-5p [%c{3}] %m%n###### File appender definition #######log4j.appender.File=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.File.File=alfresco.loglog4j.appender.File.Append=truelog4j.appender.File.DatePattern=.yyyy-MM-ddlog4j.appender.File.layout=org.apache.log4j.PatternLayoutlog4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n

 

现在需要定义一个名为File2的appender ,仅记录INFO和ERROR,哈哈,有请Log4j的Filter

log4j.appender.File2=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.File2.File=alfresco2.loglog4j.appender.File2.Append=truelog4j.appender.File2.DatePattern=.yyyy-MM-ddlog4j.appender.File2.layout=org.apache.log4j.PatternLayoutlog4j.appender.File2.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n#配置Filter#定义id为F1的拦截器,只接受INFO到ERRORlog4j.appender.File2.filter.F1=org.apache.log4j.varia.LevelRangeFilterlog4j.appender.File2.filter.F1.LevelMin=INFOlog4j.appender.File2.filter.F1.LevelMax=ERROR#定义id为F2的拦截器,不接受WARNlog4j.appender.File2.filter.F2=org.apache.log4j.varia.LevelMatchFilterlog4j.appender.File2.filter.F2.levelToMatch=WARNlog4j.appender.File2.filter.F2.acceptOnMatch=false#可以继续定义你需要的拦截器F3/F4.....

通过定义不同组合的LevelRangeFilter/LevelMatchFilter,让特定的appender只记录你需要的log等级,非常方便的!

详细参考,请查阅Log4j:

JavaDoc Filter PropertyConfigurator

Log4j 分级输出