上一篇文章说到了 log4j 的 properties 的配置方式,虽然感觉区别没有很大,但是 log4j.properties的配置方式里面不能使用 Filter 过滤器来限制日志级别,另一个原因在于 log4j.xml 在插入数据库的时候sql 语句可以放在 layout 属性的 ConversionPattern 参数中,而 log4j.properties 配置起来就显得更加麻烦。
一、步骤
1.引入 jar 包
2.src 下创建 log4j.xml 文件
3.配置头部(重要)
4.配置 XML
二、代码部分
XML 文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- 以下是 appender 的定义,定义日志输出的目的地、输出方式和过滤级别 -->
<!-- * 1. 一个 appender 子元素定义一个日志输出目的地 * 2. 一个logger子元素定义一个日志写出器 -->
<appender name="myFileAppend" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="E:logs//output.log" /><!-- 设置日志输出文件名 -->
<!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
<param name="Append" value="true" />
<param name="MaxBackupIndex" value="10" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p (%c:%L)- %m%n" />
</layout>
<!-- LevelRangeFilter:是一个非常简单的过滤器基于水平匹配,可拒绝消息优先级在一定范围内。 过滤器承认三个选项 LevelMin
, LevelMax , AcceptOnMatch。 如果 LoggingEvent 的水平不是 Min 和 Max (包容),然后过滤。否认返回。
如果日志事件级别是在指定范围内,然后如果 AcceptOnMatch 是真的,过滤器。接受返回,如果AcceptOnMatch是假,过滤器。中立的返回。
如果 LevelMin 没有定义,那么就没有最小可接受的水平(即水平永远不会拒绝过于“低”/不重要)。 如果LevelMax没有定义,那么就没有最大可接受的水平(即水平也不会拒绝这份“高”/重要)。
参考 setThreshold 方法可用于所有输出源扩展 AppenderSkeleton 为一个更加方便的方式来过滤事件级别。 -->
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"></param>
<param name="LevelMax" value="DEBUG"></param>
<param name="AcceptOnMatch" value="true"></param>
</filter>
</appender>
<!-- 控制台输出 -->
<appender name="consoleAppend" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%-d{yyyy-MM-dd HH:mm:ss} [%5p][%t][%c{1}]-[%M] %m%n" />
</layout>
</appender>
<appender name="activexAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="E:/logs/activex.log" />
<param name="Appender" value="false"></param>
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
</layout>
</appender>
<!-- 日志写出器:每一个 logger 可以有多个输出目的地和输出方式 additivity 指示是否遵循缺省的继承机制 -->
<logger name="com.inspur.log4j.testLog4j" additivity="false">
<level value="DEBUG"></level>
<appender-ref ref="consoleAppend"></appender-ref>
</logger>
<!-- 根logger的设置 -->
<root>
<priority value="debug" />
<appender-ref ref="myFileAppend" />
<appender-ref ref="activexAppender" />
</root>
</log4j:configuration>
测试类
package com.inspur.log4j;
import org.apache.log4j.Logger;
public class testLog4j {
public static final Logger log = Logger.getLogger(testLog4j.class);
public static void main(String[] args) {
System.out.println("Start.");
for (int i = 0; i < 4; i++) {
log.info("Enter the main()....");
log.debug("Enter the main()....");
log.warn("Enter the main()....");
log.error("Exception!");
System.out.println("This is log4j test.");
log.info("End.");
}
}
}
记得要在指定目录下建立一个 logs 文件夹~