<?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">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%7r] %-5p %c %M:%L - %m%n"/>
</layout>
</appender>
<appender name="FILE-DEBUG" class="org.apache.log4j.DailyRollingFileAppender">
<param name="DatePattern" value="'.'yyyyMMdd" />
<param name="Append" value="true"/>
<param name="Threshold" value="DEBUG"/>
<param name="Encoding" value="UTF-8"/>
<param name="file" value="${profile.log.root.path}/${profile.log.name.web}/${profile.log.name.web}-debug.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%7r] %-5p %c %M:%L - %m%n"/>
</layout>
</appender>
<category name="com.portal.controller" <strong><span style="color:#ff6666;">additivity="false"</span></strong>>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
</category>
<root>
<priority value="INFO"/>
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE-DEBUG"/>
</root>
</log4j:configuration>
public String index(Model model) {
logger.info("日志测试");
return null;
}
测试结果:
1、不写root标签,只写category标签
输出结果:测试日志
2、写root标签和category,category的属性additivity="false"
输出结果:测试日志
3、写root标签和category,category的属性additivity="true"
输出结果:测试日志 测试日志
4、不写category,只写root
输出结果:测试日志
5、都不写
不会输出任何日志
6、写root,不写category,但是root中不写<appender-ref ref="CONSOLE"/>
在控制台不会输出任何日志
7、不写root,写category,category的属性additivity="false"
输出结果:测试日志
说明:category的属性additivity="false"表示在category中定义日志输在root中过滤掉
总结:
category的name,指定的是控制某个包下的日志 , 可以按照业务逻辑进行日志分类输出打印
root是控制整个工程的日志
root和category都是通过<appender-ref ref="CONSOLE"/>执行具体appender中的日志策略,配置哪个appender执行哪个
root和category是父子关系,root标签可以不写,category也可以不写 , 但是必须写一个
category的属性additivity="false"表示在category中定义日志输在root中过滤掉
其他:
category的name,按照业务逻辑进行日志分类输出打印
例如:定义name = “userManagerLog” , 那么在代码中与用户管理相关的业务引入日志的时候 LogManager.getLogger(“userManagerLog”) ,
则可以通过控制一个业务逻辑的日志打到一个文件下