当前位置: 首页 > 面试题库 >

JUL到SLF4J桥

穆丁雨
2023-03-14
问题内容

我目前正在观察一个第三方库(即restfb)正在使用java.util.logging,即使我的logback.xml中没有配置SLF4J控制台附加程序,我也看到这些日志最终出现在STDOUT中。我的类路径中还有jul-
slf4j
桥。安装网桥时,jul-to-
slf4j网桥是否仅登录到由logback配置的附加程序,还是也登录到stdout?


问题答案:

您需要致电SLF4JBridgeHandler.install()。您还需要在java.util.logging中的root记录器(以下摘录中的原因)上启用所有日志级别,并删除默认的控制台附加程序。

该处理程序会将jul日志记录重定向到SLF4J。但是,只有在jul中启用的日志将被重定向。例如,根据定义,如果调用jul
logger的日志语句禁用了该语句,则该语句将不会到达任何SLF4JBridgeHandler实例,并且无法重定向。

整个过程可以像这样完成

import java.util.logging.Logger;
import org.slf4j.bridge.SLF4JBridgeHandler;

SLF4JBridgeHandler.removeHandlersForRootLogger();
SLF4JBridgeHandler.install();
Logger.getLogger("").setLevel(Level.FINEST); // Root logger, for example.

出于性能方面的考虑,您可以将级别设置为高于最佳级别,但是如果不java.util.logging首先启用它们就无法打开这些日志(由于上面摘录中所述的原因)。



 类似资料:
  • 问题内容: 我找到了一篇有用的文章,解释了如何使Jersey使用SLF4J而不是JUL。现在,我的单元测试看起来像(并且很完美): 我的包括以下依赖项: 它运行完美,但是我不想在每个单元测试中都进行相同的配置。这是很明显的代码重复,我想避免。我怎样才能更有效地做到这一点? ps。也许不可能优化上面的代码,而我正在尽力而为? 问题答案: 最好的方法是通过自定义Listener。在JSF servle

  • 但是这种方法确实有两个问题:我不能使用在中设置处理程序和级别的方法,因为它根本没有效果(我已经通过文件中的系统属性设置了文件的路径)。 使用的方法起到了帮助作用,因为这使得java util日志以我的Log4j2格式打印。但是我创建的java util不具有所需的级别,而是默认的级别,尽管根记录器具有正确的级别。因此,java util日志记录函数中的默认保护阻止了桥接器的输入,因此我永远不能记录

  • 我知道使用SLF4J和Log4j2作为记录器实现应该很容易。 您只需要将jar添加到类路径中。 我原以为我是这样做的,但我现在仍在努力 我的的关键部分 然后是 然后,查看lib文件夹 但是我没有得到相应的错误消息。 我正在使用 Eclipse版本:2020-09(4.17.0) 和

  • 尝试部署 Web 应用程序时,由于日志记录错误(如下所示),它将失败: Java . lang . nosuchmethoderror:org . SLF 4j . SPI . locationawarelogger . log(Lorg/SLF 4j/Marker;ljava/lang/String;il Java/lang/String;ljava/lang/Throwable;) 我已经谷歌

  • 我在我的项目中使用log4j2和slf4j 信息: pom文件 更新:我在pom文件中添加了以下依赖项,我在mavenrepository中看到了jar——尽管在运行mvn clean/install时仍然看到相同的消息

  • SLF4J是为各种loging APIs提供一个简单统一的接口,从而使得最终用户能够在部署的时候配置自己希望的loging APIs实现。 Logging API实现既可以选择直接实现SLF4J接的loging APIs如: NLOG4J、SimpleLogger。也可以通过SLF4J提供的API实现来开发相应的适配器如Log4jLoggerAdapter、JDK14LoggerAdapter。