- appender 日志输出的目的地,可以通过filter设置,过滤日志,其日志级别的优先级最大,可以定义多个appender
常用参数:
日志级别 Threshold
过滤器 filter (LevelRangeFilter,DenyAllFilter)
常见的appender
<!-- 输出日志到控制台 ConsoleAppender -->
<appender name="console"
class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="levelMin" value="INFO"/>
<param name="levelMax" value="FATAL"/>
<param name="acceptOnMatch" value="true"/>
</filter>
</appender>
<appender name="file"
class="org.apache.log4j.FileAppender">
<param name="File" value="/tmp/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>
<!-- perf4j的统计-->
<appender name="CoalescingStatistics" class="org.perf4j.log4j.AsyncCoalescingStatisticsAppender">
<param name="TimeSlice" value="600000"/>
<appender-ref ref="Performance"/>
</appender>
- rootLogger 没有定义子logger的优先级都使用rootLogger的优先级。
<root>
<priority value="INFO"/>
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
- 日志级别具有继承关系,可以通过com.company的方式定义多个自logger
比如针对perf4j的logger
<logger name="org.perf4j.TimingLogger" additivity="false">
<level value="INFO"/>
<appender-ref ref="CoalescingStatistics"/>
</logger>
针对某个业务:com.company.protocol包下的logger
<logger name="com.company.protoco" additivity="false">
<level value="ERROR"/>
<appender-ref ref="console"/>
</logger>
这样logger的日志级别优先级会大于rootLogger的日志级别,也就是即使rootLogger设置为ERROR,org.perf4j.TimingLogger的INFO日志仍会正常输出。另外,由于使用了additivity属性,日志只会通过console,不会再父logger(这里指rootLogger)中输出。
- 关于appender的继承性,如果logger的是additivity设为false,则子Logger只会在自己的appender里输出,而不会在父Logger的appender里输出
网友评论