Java Log4j2 Servlet 3.0未记录日志

Java Log4j2 Servlet 3.0未记录日志,java,tomcat,jakarta-ee,servlets,log4j2,Java,Tomcat,Jakarta Ee,Servlets,Log4j2,我有一个JAX-RS2.0应用程序在Tomcat7服务器上运行,我使用log4j2和SLF4J将服务器日志记录到一个文件中 在生产环境中运行服务器时,我似乎无法在日志文件中正确显示任何日志,尽管在运行集成测试时,日志输出是正确的 在生产中,日志只是重定向到控制台 我的log4j2.xml文件位于WEB-INF/classes文件夹中,我还包括了所有必要的依赖项 我的配置文件如下所示: <?xml version="1.0" encoding="UTF-8"?> <Configu

我有一个JAX-RS2.0应用程序在Tomcat7服务器上运行,我使用log4j2和SLF4J将服务器日志记录到一个文件中

在生产环境中运行服务器时,我似乎无法在日志文件中正确显示任何日志,尽管在运行集成测试时,日志输出是正确的

在生产中,日志只是重定向到控制台

我的log4j2.xml文件位于
WEB-INF/classes
文件夹中,我还包括了所有必要的依赖项

我的配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
    <RollingFile name="file" fileName="log/trace.log" append="true" filePattern="log/trace.%i.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %X %logger{36} - %msg%n"/>
        <Policies>
            <OnStartupTriggeringPolicy/>
            <SizeBasedTriggeringPolicy size="10 MB" />
        </Policies>
    </RollingFile>
</Appenders>
<Loggers>
    <Logger name="my.package" level="TRACE" additivity="false">
        <AppenderRef ref="file"/>
    </Logger>
    <Root level="WARN">
        <AppenderRef ref="file"/>
    </Root>
</Loggers>
</Configuration>

web.xml
不需要配置(我正在关注log4j2网站上的文档)

编辑
我已经尝试将
根目录
级别设置为
跟踪
,但所有内容仍然被重定向到控制台。文件
log/trace.log
本身就是创建的,只是从来没有写入。我还尝试设置了
immediateFlush=true
,但也没有任何影响。

我注意到您将状态日志(log4j内部日志)设置为跟踪。这将把log4j内部初始化消息转储到控制台。这就是你的意思吗

否则,您提供的配置将显示没有具有指向ConsoleAppender的appender ref的记录器。 因此,如果您还看到您的应用程序日志被输出到控制台(除了log4j的状态日志消息之外),我怀疑在类路径的某个地方还有另一个log4j2.xml(或log4j2 test.xml)配置文件

幸运的是,log4j的状态日志还应该显示log4j配置文件的位置,因此您可以确认实际加载的配置文件。 确认所有工作正常后,您可以通过设置
关闭状态记录

我想出来了

原来我使用的是
gretty
插件和
gradle
,它包含自己的日志包(logback库)


它使用了自己的内部
logback.xml
,该文件被重定向到控制台。我通过使用自己的配置覆盖内部
logback.xml
(使用
logback
的配置)解决了这个问题,现在一切正常了

嗯,就是这样,目录结构中没有另一个log4j2.xml,所以我仍然不知道为什么输出会直接发送到控制台。创建了一个日志文件,但它从未附加到。log4j的状态日志打印到控制台。这包括加载的log4j配置文件的位置。那个位置对吗?为了帮助确定原因,可以添加log4j状态日志的输出吗?这将显示是否存在任何初始化问题。此问题已报告为,现在已修复。明天我将发布Gretty 1.1.9版,它将包含修复程序。