当前位置: 首页 > 知识库问答 >
问题:

使用Keycloak将Jboss日志记录到slf4j/log4j2

滕渝
2023-03-14

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

通过将add-logging-api-dependencies设置为false来排除Wildfly日志记录依赖项。log4j2.xml在打包的EAR外部指定,并用log4j.configurationfile系统属性引用。

现在问题来了。我还希望Keycloak使用log4j2,但我无法使其工作。Keycloak使用的是Jboss日志包装器,无论我设置了哪个日志提供程序,它都将获取JBossLogManager-我总是获取ClassNotFoundExceptionNoClassDefFoundError

我意识到有一个类路径问题,但我在这一点上没有想法。我尝试使用以下命令创建log4j-slf4j-impllog4j-api&log4j-coreWildfly模块,但仍然得到相同的错误。

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

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

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

共有1个答案

寿伟
2023-03-14

将库作为模块添加可能不需要使其可用于您的应用程序。您是否在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>
 类似资料:
  • 我在具有以下logback.xml文件的类路径中有slf4j和logback jar(该文件以前已经成功使用过)。但是,DOCX4J3.0仍然将日志记录信息打印到标准输出。我正在使用NetBeans7.4构建基于docx4j的应用程序。我想将日志级别更改为错误,并将其发送到日志文件中。不知道我错过了什么。任何帮助都是非常感谢的。

  • 问题内容: 我正在迁移一个曾经使用log4j进行logback / slf4j的应用程序,并且已经出现问题约2周了……我做了一个小项目来测试logback / slf4j,它的工作效果很好,但是由于某种原因,在应用它时到实际的应用程序,它只是不想工作。 我正在使用JBoss 6.2,将EAR部署到standalone / deployments目录并启动服务器(除了我得到这个异常的事实,这一切都很

  • 问题内容: 我已经将一个Web应用程序部署到服务器上。我的应用程序使用和。但是,并非所有日志记录消息都已写入文件。 在我的课堂上,我有: 我的文件在本地计算机上运行良好,并且已正确部署。 我看到正在写入的应用程序生成的错误消息没有写入我的。由于输出模式的格式与我的模式不同,因此看起来的日志消息来自其他日志框架。我在中看到的日志记录如下: 我的log4j模式是这样的: 一些日志记录出现在我的文件日志

  • 在将quartz scheduler添加到项目中后,Tomcat的服务器日志会被垃圾邮件发送,并显示以下消息: [信息][talledLocalContainer]12:15:06.319[DefaultQuartzScheduler\u QuartzSchedulerThread]调试o.quartz。果心QuartzSchedulerThread-批量获取0个触发器 我正在尝试禁用该日志消息,

  • 在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记

  • 我在Java日志记录方面遇到了一些障碍。我想将日志发送到笔记本电脑上的Nginx本地服务器。我如何使用log4j或slf4j实现这个函数,有人能帮我实现代码吗?谢谢