我的 log4j2 日志文件总是有每行的双输出。请问如何停止复制?

Posted

技术标签:

【中文标题】我的 log4j2 日志文件总是有每行的双输出。请问如何停止复制?【英文标题】:My log4j2 log file always have double output of each line. How can I stop the duplication please? 【发布时间】:2014-02-23 15:16:29 【问题描述】:

我的 log4j2 日志文件每行总是有双输出。请问如何停止复制?

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
    <properties>
        <property name="name">CernerPharmacyWebApp</property>
        <property name="pattern">%d %-5p %C2 (%F:%L) - %m%n</property>
    </properties>
    <Appenders>
        <Console name="CONSOLE" target="SYSTEM_OUT">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout><pattern>$pattern</pattern></PatternLayout>
        </Console>
        <RollingFile name="ROLLING_FILE" fileName="..\logs\$name.log"
                     filePattern="..\logs\$name-%dyyyy-MM-dd-%i.log">
            <PatternLayout><pattern>$pattern</pattern></PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/><!-- Rotated everyday -->
                <SizeBasedTriggeringPolicy size="50 MB"/> <!-- Or every 50 MB -->
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
            <!-- <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="ROLLING_FILE"/>
        </Root>
        <!-- Controls packages -->
        <Logger name="com.jarmel.pharmacy.controls.BarCodeOrderServlet" level="trace">
            <!-- <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="ROLLING_FILE"/>
        </Logger>
        <Logger name="com.jarmel.pharmacy.controls.GetCodeValues" level="error">
            <!-- <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="ROLLING_FILE"/>
        </Logger>
        <Logger name="com.jarmel.pharmacy.controls.GetPersonnelServlet" level="error">
            <!-- <AppenderRef ref="CONSOLE"/> -->
            <AppenderRef ref="ROLLING_FILE"/>
        </Logger>
   </Loggers>
   </Configuration>

【问题讨论】:

请向我们提供更多信息。添加一些记录消息的代码,并可能是您现在拥有的实际输出的示例。有了更多信息,您可能会得到更多/更好的帮助! 【参考方案1】:

您的根记录器和命名记录器都指的是同一个附加程序。 每个活动记录器都会向其附加器发送一个事件,因此附加器将多次接收事件,每个记录器一次。 (根记录器将获取所有事件,命名记录器只会获取代码中记录器发出的具有匹配名称的事件。)

这称为可加性。见http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity

您可以在命名记录器配置中设置 additivity="false"。

【讨论】:

准确的说是标签中的一个属性 还应该指出的是,这会影响日志级别等于或低于的命名记录器,因为这两个记录器都发送appender 的相同事件。所以additivity="false" 应该继续引用根记录器的附加程序并具有相等/更低的日志级别的记录器。

以上是关于我的 log4j2 日志文件总是有每行的双输出。请问如何停止复制?的主要内容,如果未能解决你的问题,请参考以下文章

Log4j2 的分模块/分包日志输出

记一次Log4j2日志无法输出的 心酸史

log4j2自定义Appender(输出到文件/RPC服务中)

log4j与log4j2

并非每个日志都使用 LOG4j2 属性文件在日志文件中打印

idea添加log4j2有颜色的日志输出