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

为什么在使用SLF4J时排除公用日志记录?

戚奇略
2023-03-14

我正在构建一个非常简单的应用程序,这样我就可以理解slf4j、桥接库、日志实现等。我的应用程序依赖于slf4j,它使用日志实现。此外,它还引入了一个包含公共日志库的库。

应用程序依赖关系:

  dependencies {
    compile project(':library-with-jcl')

    compile group: 'org.slf4j', name: 'jcl-over-slf4j', version: '1.7.25'
    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25'
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
}

库依赖项:

dependencies {
  compile group: 'commons-logging', name: 'commons-logging', version: '1.2'
}

当我没有包含jcl-over-SLF4j时,库将按照预期通过JCL输出日志记录。当我包含jcl-over-SLF4J时,通过JCL记录器的任何日志记录都将被slf4j拾取并重定向到Logback。

我不断在internet上读到一些文章,这些文章说,如果我的应用程序依赖于slf4j和依赖于JCL的库,我必须排除commons-logging依赖项。然而,这似乎没有必要,我不明白为什么。在什么情况下我必须排除JCL依赖关系?我在这里的例子是否过于简单而暴露了潜在的问题?

此外,我没有看到建议我必须排除(例如,如果我使用log4j桥的话)依赖于它的库中的log4j依赖项。为什么不呢?JCL是特例吗?

共有1个答案

阎阎宝
2023-03-14

JCL和SLF都是日志外观,也就是说,它们只是一个抽象日志实现的API。

JUL(java.util.logging)和Logback是日志记录实现。默认情况下,JCL将调用JUL,SLF将调用Logback。

为什么需要两个活动日志记录实现,这两个实现需要分别配置,并且必须记录到不同的日志文件?

您没有,并且您的应用程序选择了使用Logback,并且选择了JCL应该调用SLF(jcl-over-SLF4j),这样代码调用JCL还是SLF都不重要,日志记录将通过Logback完成。

因此,您需要删除(排除)库依赖项添加的重复JCL facade,该facade现在由jcl-over-SLF4j实现。

 类似资料:
  • 我的Scala/SBT项目使用了grizzled-slf4j和logback。第三方依赖项使用Apache Commons日志记录。

  • 我在具有以下logback.xml文件的类路径中有slf4j和logback jar(该文件以前已经成功使用过)。但是,DOCX4J3.0仍然将日志记录信息打印到标准输出。我正在使用NetBeans7.4构建基于docx4j的应用程序。我想将日志级别更改为错误,并将其发送到日志文件中。不知道我错过了什么。任何帮助都是非常感谢的。

  • 我们正在将SonarQube 5.1与Jacoco maven插件0.7.4一起使用,我们所有的slf4j日志记录语句(如显示仅覆盖了2个分支中的1个。我知道这是因为slf4j在内部执行,这很好,但我们不希望这抛弃我们的数字。我们对测试 slf4j 不感兴趣,我们宁愿不对不同的日志记录级别多次运行每个测试。 那么,我们如何告诉声纳和/或Jacoco将这些线路排除在覆盖范围之外呢?它们都有可配置的文

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

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

  • 我有一个Keycloak EAR模块,部署在Keycloak 11.0上。在我的EAR模块中,我希望使用带有SLF4J的log4j2日志库。我通过直接在pom中添加以下依赖项成功地完成了这一点:、&。 通过将设置为来排除Wildfly日志记录依赖项。在打包的EAR外部指定,并用系统属性引用。 现在问题来了。我还希望Keycloak使用log4j2,但我无法使其工作。Keycloak使用的是Jbos