繁体   English   中英

Jboss 使用 Keycloak 登录到 slf4j/log4j2

[英]Jboss logging to slf4j/log4j2 with Keycloak

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

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

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

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

./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 Logging findProvider方法应该返回Log4j2LoggerProvider 我怎样才能做到这一点?

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

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

<?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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM