0

我有一个 Keycloak EAR 模块,部署在 Keycloak 11.0 上。在我的 EAR 模块中,我想将 log4j2 日志库与 slf4j 一起使用。我通过直接在 pom 中添加以下依赖项成功地实现了这一点:log4j-slf4j-impl, log4j-api& log4j-core

add-logging-api-dependencies通过设置为排除 Wildfly 日志记录依赖项falselog4j2.xml在打包的 EAR 之外指定,并使用log4j.configurationFile系统属性进行引用。

现在的问题。我也希望 Keycloak 使用 log4j2,但我无法让它工作。JbossLogManagerKeycloak 正在使用 Jboss Logging 包装器,无论我设置哪个日志记录提供程序,它总是会拾取- 我总是得到ClassNotFoundExceptionNoClassDefFoundError.

我意识到存在类路径问题,但此时我没有想法。我尝试使用以下命令创建log4j-slf4j-impl, log4j-api& Wildfly 模块,但仍然遇到相同的错误。log4j-core

./jboss-cli.sh --command="module add --name=org.apache.logging.log4j.log4j-api --resources=/Users/jernej/log4j-api-2.13.3.jar"

如果我理解正确,log4j2 应该在 Wildfly 启动时的类路径中(搜索时),如果正确添加了模块LoggerProvider,Jboss LoggingfindProvider方法应该返回?Log4j2LoggerProvider我怎样才能做到这一点?

假设我想使用位于单独库中的 log4j2 appender。如果我将此库添加为 Wildfly 模块,则此 log4j2 附加程序也可以被其他部署使用 - 例如 keycloak-server.war?

4

1 回答 1

0

将库添加为模块可能不需要使其可用于您的应用程序。您是否在您的 ear 文件jboss-deployment-structure.xml的文件夹中定义了对该模块的依赖关系?META-INF像这样的东西:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.3"
                            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                            xsi:schemaLocation="urn:jboss:deployment-structure:1.3 http://www.jboss.org/schema/jbossas/jboss-deployment-structure-1_3.xsd">
    <deployment>
        <dependencies>
            <module name="org.apache.logging.log4j.log4j-api" export="true"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>
于 2020-11-03T20:53:39.090 回答