如何防止重复记录到catalina.out中的tomcat控制台?

时间:2019-07-03 14:41:39

标签: java spring spring-boot tomcat slf4j

我正在将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

1 个答案:

答案 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文件中的版本。