根据here,Log4j2应该与Tomcat7.0.47一起使用。我正在使用TomEE Plus 7.0.47。
我在web-inf / classes文件夹中部署了一个带有log4j2.xml的web应用程序。这是配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="${sys:catalina.home}/logs/testapp.log">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="org.alex" level="TRACE" additivity="false">
<AppenderRef ref="File"/>
</Logger>
<Root level="INFO">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
我在一个名为org.alex.util.JSON的类中声明了一个记录器:
private static final Logger LOG = LoggerFactory.getLogger(JSON.class);
我正在使用slf4j-api 1.7.5,并在tomcat lib中添加了以下库:
如果我将配置状态更改为TRACE,我可以看到我的配置文件被拾取并且配置按预期发生。我也可以看到MBean被添加。
但是,我的日志文件中没有一个日志语句结束。我调试了log4j2 Logger,看到isEnabled(...)
方法返回false
,因为记录器(com.alex.util.JSON)设置了“ERROR”级别,而配置设置了包org .alex到TRACE。
进一步调查显示它使用为level = ERROR配置的DefaultConfiguration,并且仅配置了root。我正在考虑一个类加载器问题,但我似乎无法弄清楚原因是什么以及如何解决它。
有谁知道我做错了什么?
答案 0 :(得分:1)
这应该适用于trunk
顺便说一下,log4j2有针对tomcat的黑客攻击,因为tomee包装类加载器并不确定它们是否按预期工作...
答案 1 :(得分:0)
这很奇怪。请在Log4j2问题跟踪器中为此提出一张票,以便Log4j团队可以查看。
如果你把你提到的jar文件放在WEB-INF / lib中而不是在Tomcat的lib文件夹中,问题可能会消失。
答案 2 :(得分:0)
要补充,log4j2依赖于在ejb和app扫描之后调用的servletcontainerinitializer,因此可以过早加载ejbs。对tomcat上下文侦听器执行相同操作会使其更好地工作