簡體   English   中英

如何讓JBoss不影響我自己的log4j2設置?

[英]How to let JBoss not to affect my own log4j2 settings?

我在多個項目中使用具有兩種配置(log4j.prop 和 log4j2.xml)的 Log4j2(2.17.1)。 我的 APP 的 log4j2 在 Tomcat 9 上正常工作,同時讀取外部 log4j 配置。 但是當我將我的應用程序部署到 JBoss EAP 7 上時,它會以某種方式停止工作或僅登錄到 server.log。所以我認為問題來自 JBoss,我需要一種方法來告訴它不要與我自己的 Log4j2 混淆。 有誰知道該怎么做?

此問題的根本原因與 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.log4jorg.apache.commons.logging以使 Log4 正常工作的原因。

在 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

命令行示例:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM