我的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>
最佳答案
您的根记录器和命名记录器都引用同一个附加程序。
每个 Activity 记录器都将事件发送到其附加程序,因此附加器将多次接收该事件,每个记录器一次。 (root记录器将获取所有事件,命名记录器将仅获取Logger在您的代码中使用匹配名称发出的事件。)
这称为可加性。参见http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity
您可以在命名的记录器配置中设置additivity =“false”。