1

我正在开发一个 Java Spring 项目,我想从每个包中记录 WARNS,并且只从我的包中记录 INFO。

我不知道为什么 Log4J 为我的包提供双行输出。

有人可以告诉我为什么

<?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 [%t] %-5p %c - %m%n"/>
        </layout>
    </appender>


    <logger name="com.xxxxx.mongodb">
        <level value="INFO"/>
        <appender-ref ref="console" />
    </logger>

    <root>
        <priority value="WARN"/>
        <appender-ref ref="console"/>
    </root>
</log4j:configuration>
4

2 回答 2

2

因为您的记录器从根记录器继承了附加程序。

log4j 状态的文档

logger C 的 log 语句的输出将发送到 C 中的所有 appender 及其祖先。这就是术语“附加程序可加性”的含义。

但是,如果记录器 C 的祖先(例如 P)将可加性标志设置为 false,则 C 的输出将定向到 C 中的所有 appender 及其祖先(包括 P),但不会定向到 P 的任何祖先中的 appender .

默认情况下,记录器的可加性标志设置为 true。

于 2013-06-26T18:33:33.707 回答
0

添加

additivity="false"

归因于记录器产生双重输出的原因。

于 2013-06-26T18:44:10.533 回答