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