[英]Jboss logging to slf4j/log4j2 with Keycloak
我有一个 Keycloak EAR 模块,部署在 Keycloak 11.0 上。 在我的 EAR 模块中,我想将 log4j2 日志库与 slf4j 一起使用。 我通过直接在 pom 中添加以下依赖项成功地实现了这一点: log4j-slf4j-impl
, log4j-api
& log4j-core
。
通过将add-logging-api-dependencies
为false
来排除 Wildfly 日志记录依赖add-logging-api-dependencies
。 log4j2.xml
在打包的 EAR 之外指定,并使用log4j.configurationFile
系统属性进行引用。
现在的问题。 我也希望 Keycloak 使用 log4j2,但我无法让它工作。 Keycloak 正在使用 Jboss Logging 包装器,无论我设置哪个日志记录提供程序,它总是会选择JbossLogManager
- 我总是得到ClassNotFoundException
或NoClassDefFoundError
。
我意识到存在类路径问题,但此时我没有想法。 我尝试使用以下命令创建log4j-slf4j-impl
、 log4j-api
和log4j-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.