Java Log4J2和Tomee Plus 7.0.47不工作

Java Log4J2和Tomee Plus 7.0.47不工作,java,log4j2,apache-tomee,Java,Log4j2,Apache Tomee,根据,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

根据,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>
我正在使用slf4j api 1.7.5,并将以下库添加到tomcat库中:

  • slf4j-api-1.7.5.jar
  • log4j-api-2.0-rc1.jar
  • log4j-core-2.0-rc1.jar
  • log4j-slf4j-impl-2.0-rc1.jar
如果我将配置状态更改为“跟踪”,我可以看到我的配置文件被拾取,配置按预期进行。我还可以看到MBean被添加。 但是,我的日志文件中没有一条日志语句。我调试了log4j2记录器,发现
isEnabled(…)
方法返回
false
,因为记录器(com.alex.util.JSON)设置了级别“ERROR”,而配置将包org.alex设置为TRACE。 进一步的调查显示,它使用了为level=ERROR配置的DefaultConfiguration,并且只配置了root。我正在考虑一个类加载器问题,但我似乎不知道原因是什么以及如何解决它。
有人知道我做错了什么吗?

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


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

这应该可以在trunk上使用


顺便说一句,log4j2对tomcat有一些攻击,因为tomee包装类加载器不确定它们是否能按预期工作…

要复杂,log4j2依赖于servletcontainerinitializer,它是在ejb和应用程序扫描之后调用的,因此ejb可能会过早加载。对tomcat上下文侦听器执行同样的操作将使其工作得更好

Hi Remko,事实上,将JAR放在webapps库中可以解决问题。我再次恢复了旧的状态,以确保它不起作用,而且它也不起作用。此外,我注意到在配置时创建的记录器实例的类加载器是org.apache.openejb.core.TempClassLoader,而调用的记录器的类加载器是org.apache.catalina.loader.StandardClassLoader。我对整个机制了解不多,无法判断这是否符合预期,但无论如何,我会在问题报告中提到这一点。大家好,这个问题似乎源于TomEE的重载类加载器与Tomcat的相比。
private static final Logger LOG = LoggerFactory.getLogger(JSON.class);