繁体   English   中英

Log4j2 Servlet 3.0未记录

[英]Log4j2 Servlet 3.0 not logging

我有一个在Tomcat 7服务器上运行的JAX-RS 2.0应用程序,并且我正在使用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网站上的文档)。

编辑我尝试将Root级别设置为TRACE但所有内容仍被重定向到控制台。 文件log/trace.log本身已创建,但从未写入。 我也尝试设置immediateFlush=true但这也没有任何影响。

我注意到您已将状态日志记录(log4j内部日志记录)设置为TRACE。 这会将log4j内部初始化消息转储到控制台。 这是什么意思?

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

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

我想到了!

原来,我使用了带有gradlegretty插件,其中包含它自己的日志记录程序包(logback库)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM