我的log4j2日志文件总是每行都有双精度输出。我该如何阻止重复?

2022-09-01 22:36:08

我的log4j2日志文件总是每行都有双精度输出。我该如何阻止重复?

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
    <properties>
        <property name="name">CernerPharmacyWebApp</property>
        <property name="pattern">%d %-5p %C{2} (%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}-%d{yyyy-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”。


答案 2

无需为每个命名记录器指定单独的追加器,除非目标与根记录器追加器不同。您也可以按如下方式重写:

<Root level="error">
        <!-- <AppenderRef ref="CONSOLE"/> -->
        <AppenderRef ref="ROLLING_FILE"/>
</Root>
<!-- Controls packages -->
<Logger name="com.jarmel.pharmacy.controls.BarCodeOrderServlet" level="trace"/>
        
<Logger name="com.jarmel.pharmacy.controls.GetCodeValues" level="error"/>
           
<Logger name="com.jarmel.pharmacy.controls.GetPersonnelServlet" level="error"/>
            

推荐