最近由于工作原因需要将log4j 1.2版本升级为2.0以上,就需要将log4j配置文件修改成2.0版本
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!--将日志输出到控制台-->
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
<!--输出的级别为INFO-->
<param name="Threshold" value="INFO" />
<layout class="org.apache.log4j.PatternLayout">
<!--日志输出的格式-->
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n" />
</layout>
</appender>
<!--将日志输出到文件中,并且每隔一定的时间产生一个新的日志文件-->
<appender name="Info" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/info.log" />
<param name="Threshold" value="INFO" />
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<!--每隔一定的时间产生一个新的日志文件,文件名称的格式为value属性对应的值-->
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n" />
</layout>
<!--过滤日志级别,确保该文件中只能保存INFO和WARN级别的日志-->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="INFO" />
<param name="LevelMax" value="WARN" />
<param name="AcceptOnMatch" value="true" />
</filter>
</appender>
<appender name="Error" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="../logs/error.log" />
<param name="Threshold" value="ERROR" />
<param name="Append" value="true" />
<param name="Encoding" value="UTF-8" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n" />
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="ERROR" />
</filter>
</appender>
<root>
<appender-ref ref="Info" />
<appender-ref ref="Error" />
<appender-ref ref="Console" />
</root>
</log4j:configuration>
对应的log4j2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="warn">
<Appenders>
<!--将日志在控制台输出-->
<Console name="Console" target="SYSTEM_OUT">
<!--日志输出的格式-->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n"/>
</Console>
<!--将日志输出到文件中,fileName:文件的路径和名称,filePattern:采用某种输出日志的规则,日志的路径名和日志文件名称格式-->
<RollingFile name="infofile" fileName="../logs/info.log" filePattern="../logs/info.log.%d{yyyy-MM-dd}">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n</Pattern>
</PatternLayout>
<!--过滤日志级别,确保该文件中只能保存INFO和WARN级别的日志-->
<Filters>
<ThresholdFilter level="INFO"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!--日志文件产生的策略,每隔一定的时间产生一个新的日志文件-->
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
<RollingFile name="errorfile" fileName="../logs/error.log" filePattern="../logs/error.log.%d{yyyy-MM-dd}">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
<loggers>
<Logger name="info" level="INFO">
<AppenderRef ref="infofile" />
</Logger>
<Logger name="error" level="ERROR">
<AppenderRef ref="errorfile" />
</Logger>
<Root>
<AppenderRef ref="Console"/>
</Root>
</loggers>
</configuration>
代码详细讲解:
(1)1.x版本中 — Appender:日志输出器,配置日志的级别、输出位置等
对应2.x版本中Appenders
(2)将日志输出到控制台、文件等在1.X版本中使用
<appender name="Console" class="org.apache.log4j.ConsoleAppender">
根据class找到对应的类去查找输出日志的格式,输出到相应的位置
在2.X版本中直接在
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
</Console>
<RollingFile name="infofile" fileName="../logs/info.log" filePattern="../logs/info.log.%d{yyyy-MM-dd}">
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss} %p $r [%t] %C.%M(%L) | %m%n</Pattern>
</PatternLayout>
<Filters>
<ThresholdFilter level="INFO"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy/>
</Policies>
</RollingFile>
</Appenders>
其中Consle是将日志文件输出到控制台
RollingFile将日志输出到文件中,fileName属性对应日志路径以及文件,filePattern属性为日志名称的格式
PatternLayout:日志输出的格式
Filters:过滤日志输出的级别,下图代表该文件中只能输出INFO和WARN级别的日志
Policies:日志文件产生的策略,下图表示每隔一定的时间就产生一个新的日志文件