为什么 WildFly 控制台日志会劫持我的 WAR 的 log4j 日志?

Why is the WildFly console log hijacking my WAR's log4j log?

我有 7 个不同的 WAR 部署到同一个 WildFly / JBoss 服务器。每个 WAR 在核心设计和 Log4j 配置上都是相同的。每个 WAR 通过自己的自定义 log4j.xml 生成自己的日志文件。每个日志都写入单独的文件夹。

部署的 7 个 WAR 中有 1 个不断获取被 WildFly 的 console.log 劫持的日志记录。它会在初始化期间开始写入自己的日志 5-10 行,然后停止;其余的日志记录将定向到 console.log.

如果我在发生这种情况后重新安装 WAR,它会同时写入自己的个人日志和 WildFly console.log。如果我重新启动 WildFly,它的行为将如前所述 - 开始记录到它自己的日志,然后继续 console.log。

这个 WAR 与其他 6 个相比唯一的独特之处在于该项目使用 JAXB;其他 WAR 中的 none 使用 JAXB。

JAXB 与 Log4j 和 WildFly 之间是否存在某种未知的交互可能导致此问题? 我怀疑,但还不能证明,劫持是在 类 使用 JAXB 由 ClassLoader 加载。

jboss-7.2.0.Final , jdk-7u80x64, Log4j-1.2.13.jar

您可能需要尝试将 logging.properties 文件移动到 WAR/WEB-INF/classes。我猜是旧的 Jboss EAP 6.4,可能存在无法在 WAR/WEB-INF 目录中查找的错误。

如果这不起作用,您必须打开 org.jboss.as.logging 的跟踪日志记录,这应该会显示在您的部署中找到了 logging.properties 文件。

以下 CLI 命令将启用跟踪日志记录以查看日志子系统正在执行的操作的详细信息。

/subsystem=logging/logger=org.jboss.as.logging:add(level=TRACE)

如果您想在控制台上看到这些日志消息,您需要为控制台工具启用跟踪日志记录。

/subsystem=logging/console-handler=CONSOLE:write-attribute(name=level, value=TRACE)

资源:

sect-per-deployment_logging

Logging Configuration

通过 /WEB-INF/jboss-deployment-structure.xml

从应用程序中排除 log4j 模块解决
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.apache.log4j" />
        </exclusions>
    </deployment>
</jboss-deployment-structure>