我正在将war
应用程序部署到tomcat
Web服务器。
问题:我的日志记录既记录了应用程序日志,也记录了Catalina控制台日志(catalina.out
)。
如何防止重复项登录到该catalina文件?
log4j2-spring.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d %p %c{1.}: %m%n"/>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" />
</Console>
<RollingRandomAccessFile name="APP" fileName="/logs/application.logs" filePattern="/logs/application-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d %p %c{1.}: %m%n"/>
<Filters>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<Policies>
<TimeBasedTriggeringPolicy modulate="true"/>
</Policies>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="CONSOLE" />
<AppenderRef ref="APP" />
</Root>
</Loggers>
</Configuration>
我还已经从java.util.logging.ConsoleHandler
中删除了/opt/tomcat/conf/logging.properties
:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler
.handlers = 1catalina.org.apache.juli.AsyncFileHandler
结果:日志记录仍然转到catalina.out
。
答案 0 :(得分:2)
从<Loggers>
元素中删除它。
<AppenderRef ref="CONSOLE" />
说明:Catalina.out
文件捕获所有写入Tomcat标准输出和标准错误流的内容。您的CONSOLE
附加程序已设置为登录到标准输出。
看来log4j2-spring.xml
配置优先于logging.properties
。有人需要查看您的设置以了解原因。
(我的猜测是Spring或某物正在给Tomcat的JVM一个-D
选项,以设置一个提供记录配置位置的系统属性。{4中描述了log4j2用来定位配置的机制。 3}})
那对我来说仍然有一个问题:在我的本地开发环境中,我仍然想让任何日志进入控制台,因为不必进入像样的日志文件。我只想在远程/测试/生产服务器上禁用控制台日志记录。
根据log4j2-spring.xml
文件的位置(在WAR文件中?),您可以使用不同的配置文件构建WAR文件的两个变体。
或者,应该可以将备用log4j2-spring.xml
文件放入Tomcat的common
目录中,以便它覆盖WAR文件中的版本。