Camel Tomcat Catalina 中出现意外的调试日志

lmyy7pcs  于 2022-11-07  发布在  Apache
关注(0)|答案(1)|浏览(167)

我的Tomcat 8.0.30的catalina.out文件记录了大量的调试日志。我不知道为什么这些调试日志记录在catalina.out中,而不是记录在为应用程序配置的日志文件中。为什么记录在容器日志中?
第二个问题是,在log4j.xml中,我已经将org.apache软件包日志级别设置为WARN,那么为什么会记录这些调试日志?但是,我知道log4j.xml并不控制catalina.out的日志。

07:00:17.729 [queue://company.generic.local-6] DEBUG org.apache.activemq.ActiveMQSession - ID:us03dv4vafpc01.ilnx.com-36014-1659188569211-3:1:9 Transaction Commit :null
07:00:17.728 [queue://company.generic.local-4] DEBUG org.apache.activemq.ActiveMQSession - ID:us03dv4vafpc01.ilnx.com-36014-1659188569211-3:1:7 Transaction Commit :null
07:00:17.729 [queue://company.generic.local-8] DEBUG org.apache.activemq.ActiveMQSession - ID:us03dv4vafpc01.ilnx.com-36014-1659188569211-3:1:10 Transaction Commit :null
... 12 lines omitted ...
07:00:19.318 [queue://company.generic.local-9] DEBUG org.apache.activemq.ActiveMQSession - ID:us03dv4vafpc01.ilnx.com-36014-1659188569211-3:1:3 Transaction Commit :null
... 236 lines omitted ...
07:00:19.729 [queue://company.generic.local-2] DEBUG org.apache.activemq.ActiveMQSession - ID:us03dv4vafpc01.ilnx.com-36014-1659188569211-3:1:5 Transaction Commit :null
Show all 257 lines

这是部分启动脚本

CATALINA_HOME=${CATALINA_HOME:-/opt/tomcat8
CATALINA_BASE=${CATALINA_BASE:-/opt/${SERVICE}}
CATALINA_OUT=${CATALINA_OUT:-/var/log/catalina.out}
export CATALINA_HOME CATALINA_BASE CATALINA_OUT
CATALINA_OPT="CATALINA_OPT -Dlog4j.configuration=file:/opt/log4j.xml"
export CATALINA_OPT

exec &>> ${CATALINA_OUT}
...
EXECUTABLE="$CATALINA_HOME/bin/catalina.sh"
nohup "$EXECUTABLE" run -XX:OnOutOfMemoryError="kill -9 %p"

我使用的是log4j,而不是log4j2。在log4j.xml中,明确指示只记录org.apache.actiemq包的WARN级别。log4j.xml中只有一个附加器。部分log4j.xml为

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender class="org.apache.log4j.RollingFileAppender" name="file">
    <param name="File" value="/var/log/service.log"/>
    <layout class="org.apache.log4j.EnhancedPatternLayout">
      ....
    </layout>
  </appender> 

  <logger name="org.apache">
    <level value="warn"/>
  </logger>
  <root>
    <priority value="warn"/>
    <appender-ref ref="file"/>
  </root>
</log4j:configuration>
l0oc07j2

l0oc07j21#

我找到了这个问题的答案。至少在我的例子中,这是log4j jar和logback jar放在一起的副作用。然而,应用服务器被配置为使用log4j,但是其中一个依赖jar将logback jar作为可传递的依赖项,并且它被包裹在应用程序war文件中。在我从war中排除logback jar之后,这种绝对疯狂的日志记录停止了。我还没有做过全面的分析,这就是为什么它会记录一个完全不相关的日志,例如,在本例中,是来自https://actiemq.apache.org/maven/apidocs/org/apache/actiemq/ActiveMQSession.html#commit()的调试语句
以下是此类的方法,该方法具有调试记录器。

public void commit() throws JMSException {
        this.checkClosed();
        if (!this.getTransacted()) {
            throw new IllegalStateException("Not a transacted session");
        } else {
            if (LOG.isDebugEnabled()) {
                LOG.debug(this.getSessionId() + " Transaction Commit :" + this.transactionContext.getTransactionId());
            }

            this.transactionContext.commit();
        }
    }

相关问题