首页 文章

Log4J2和Tomee Plus 7.0.47无法正常工作

提问于
浏览
2

根据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的类中声明了一个 Logger :

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-core-2.0-rc1.jar

  • log4j-slf4j-impl-2.0-rc1.jar

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

3 回答

  • 0

    这应该适用于主干

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

  • 1

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

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

  • 0

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

相关问题