Log4J2和Tomee Plus 7.0.47无法正常工作

时间:2014-03-22 22:33:42

标签: java log4j2 tomee

根据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中添加了以下库:

  • SLF4J-API-1.7.5.jar
  • 的log4j-API-2.0-rc1.jar
  • log4j的核-2.0-rc1.jar
  • 的log4j-SLF4J-IMPL-2.0-rc1.jar

如果我将配置状态更改为TRACE,我可以看到我的配置文件被拾取并且配置按预期发生。我也可以看到MBean被添加。 但是,我的日志文件中没有一个日志语句结束。我调试了log4j2 Logger,看到isEnabled(...)方法返回false,因为记录器(com.alex.util.JSON)设置了“ERROR”级别,而配置设置了包org .alex到TRACE。 进一步调查显示它使用为level = ERROR配置的DefaultConfiguration,并且仅配置了root。我正在考虑一个类加载器问题,但我似乎无法弄清楚原因是什么以及如何解决它。 有谁知道我做错了什么?

3 个答案:

答案 0 :(得分:1)

这应该适用于trunk

顺便说一下,log4j2有针对tomcat的黑客攻击,因为tomee包装类加载器并不确定它们是否按预期工作...

答案 1 :(得分:0)

这很奇怪。请在Log4j2问题跟踪器中为此提出一张票,以便Log4j团队可以查看。

如果你把你提到的jar文件放在WEB-INF / lib中而不是在Tomcat的lib文件夹中,问题可能会消失。

答案 2 :(得分:0)

要补充,log4j2依赖于在ejb和app扫描之后调用的servletcontainerinitializer,因此可以过早加载ejbs。对tomcat上下文侦听器执行相同操作会使其更好地工作