如何让JBoss不影响我自己的log4j2设置?

问题描述 投票:0回答:3

我在多个项目上使用 Log4j2(2.17.1) 和两种类型的配置(log4j.prop 和 log4j2.xml)。我的应用程序的 log4j2 在读取外部 log4j 配置时可以在 Tomcat 9 上正常工作。但不知何故,当我将我的应用程序部署到 JBoss EAP 7 上时,它停止工作或仅登录到 server.log。所以我认为问题来自 JBoss,我需要一种方法来告诉它不要弄乱我自己的 Log4j2。有谁知道怎么做吗?

log4j2 jboss7.x
3个回答
1
投票

JBoss EAP 7.4 有一个新模块,它将 log4j-api 日志委托给 jboss-logmanager。如果您想使用 log4j 日志管理器 (log4j-core),那么您需要从部署中排除一些模块。

我想说下面的选项 1 是首选,因为它只影响单个部署。选项 2 将影响所有部署。

选项1

jboss-deployment-structure.xml
添加到您的部署中:

<jboss-deployment-structure>
  <deployment>
    <exclusions>
        <module name="org.apache.logging.log4j.api" />
    </exclusions>
  </deployment>
</jboss-deployment-structure>

选项2

将日志子系统中的

add-logging-api-dependencies
属性更改为
false

CLI 示例:

/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)

0
投票

此问题的根本原因与 JBoss EAP Logging 搜索的“ClassLoader”有关,以便找到适当的日志记录提供程序实现。此搜索按以下顺序进行:

  1. JBoss EAP 日志管理器
  2. Log4j
  3. Slf4j
  4. JDK 日志记录

由于 JBoss EAP LogManager 和 Log4j2 在类路径中都可用,因此由于“更高的优先级”,将使用 JBoss EAP LogManager。因此,您必须在日志子系统中设置

use-deployment-logging-config=false
。 此外,JBoss EAP LogManager 还在其自己的实现中使用 Log4j2 中的类。这就是为什么必须从部署中排除模块
org.apache.log4j
org.apache.commons.logging
才能使 Log4J2 正常工作。


0
投票

首先,您应该确保使用正确版本的 log4j2,导入此包的依赖项、api 和 core 以启用 log4j2。 接下来创建 log4j 包的排除项。 按照 oracle 指南上的附加程序和记录器创建配置文件,即指向控制台和滚动文件。 应该是这样,配置文件的名称可能会被它自动识别,以防它不在您的项目中使用查找来查找引用。 另一种选择是使用服务器定义的 JNDI

© www.soinside.com 2019 - 2024. All rights reserved.