[英]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">
关闭状态日志记录。
我想到了!
原来,我使用了带有gradle
的gretty
插件,其中包含它自己的日志记录程序包(logback库)。
它使用了自己的内部logback.xml
其重定向到控制台。 我通过使用自己的内部logback.xml
覆盖(使用logback
的配置)来解决此问题,现在一切正常!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.