我的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>
答案 0 :(得分:27)
您的根记录器和您的命名记录器都指的是同一个appender。 每个活动记录器都会向其appender发送一个事件,因此appender将多次接收该事件,每个记录器一次。 (根记录器将获取所有事件,命名记录器将仅在代码中使用匹配名称获取Logger发出的事件。)
这称为Additivity。见http://logging.apache.org/log4j/2.x/manual/configuration.html#Additivity
您可以在指定的记录器配置中设置additivity =“false”。