如何禁止打印外部代码输出的日志消息?

How to disable the printing of log messages output by external code?

这是一个一般性问题。

在我的代码中,我正在调用一些第 3 方库。在该库中,有一个记录器使用来自 org.apache.commons.logging 的日志工厂输出日志消息。这些日志消息与我自己代码中的所有其他日志一起出现在我的控制台中。有没有一种简单的方法可以禁止从这个外部库打印日志消息?我不想更改程序的常规日志记录配置,因为我希望所有其他日志记录保持原样。

像下面的伪代码这样的东西会很有用:

ignoreLogsFrom {
  // This call is the one that produces the logging
  externalLibrary.get
}

基本上,能够阻止从特定代码块甚至库发出的任何消息。

谢谢你能给我指出正确的方向。

是的,你可以,但很难给出正确的通用建议。问题在于 commons-logging 是一个包装库:它本身不实现日志记录,而是将其委托给其他库。

一般您需要做的步骤是:

  1. 找出使用的记录器实现。默认是Log4J but it might be something else (other popular choices include Logback or SLF4J,这是另一个门面)

  2. 查找外部库使用的记录器的名称。这是传递给 LogFactory.getLog 调用的参数。通常,它类似于记录的 class 的完全限定名称。这种命名的想法正是您想要的功能,因为它允许为应用程序的不同部分配置不同的记录器。

  3. 找出存储 #1 库的配置的位置。通常它是一些属性文件或 XML 文件(如 log4j.properties

  4. 了解如何在该日志库中配置给定命名记录器的 "level"。大多数现代日志记录库都支持分层配置,因此您可能更容易为整个外部库包禁用日志记录,而不是特定的 classes.

P.S。可能禁用库的整个日志记录不是一个好主意,将级别提高到 WARNERROR 可能足以显着减少日志量但仍然不会错过真正重要的圣