【问题标题】:Suppress java util logging from 3rd party jar抑制来自 3rd 方 jar 的 java util 日志记录
【发布时间】:2014-10-21 15:20:13
【问题描述】:

我从我的 Eclipse 控制台中的第 3 方 jar 中获得了大量的信息日志消息。破解打开 jar 我看到它使用 java.util.logging。我想将他们的 jar 的输出级别设置为 WARNING。

我尝试使用 -Djava.util.logging.config.file=pathToMy/JUL.properties 的 VM 参数 文件的内容是:

handlers=java.util.logging.ConsoleHandler
.level=WARNING
java.util.logging.ConsoleHandler.level=WARNING

不幸的是,这对输出没有影响。

如果它更容易,我的应用程序使用 SLF4J。因此,如果有一个使用不同日志记录机制的简单答案,我可以切换我的绑定以使用它。

【问题讨论】:

  • 我相信你可以在包级别设置级别。

标签: java logging slf4j


【解决方案1】:

我想你可能对下面的sn-p 有用。它将允许您在包级别设置日志行为:

Logger logger = Logger.getLogger("org.apache.axiom");
logger.setLevel(Level.WARN);

【讨论】:

  • 您的帖子无需使用签名。请注意,底部会显示您的用户名和您为帐户选择的头像。
  • 我也尝试过,但无济于事。这就是为什么我也尝试通过属性文件并做出一揽子声明以将所有内容设置为警告
  • 迄今为止最好的答案。简单,独立于任何 IDE、工具或“选项卡”,不需要额外的配置文件,也不需要更改库。就像一个魅力。
【解决方案2】:

您是否使用JConsole 确定:

  1. VM 摘要选项卡显示系统属性“java.util.logging.config.file”已设置。
  2. MBean 选项卡->java.util.logging->Operations->getLoggerLevel 为空白(无值)返回WARNING。
  3. MBean 选项卡->java.util.logging->Attributes->LoggerNames 包含活动的第 3 方记录器列表,可以将其添加到要禁用的事物列表中。只有在执行代码创建了记录器时才会列出记录器。 Anonymous loggers 未列出,但默认设置继承自根记录器。

您还可以添加以下代码来检查您的配置文件是否正常工作:

    public static void main(String[] arg) throws Exception {
        String p = System.getProperty("java.util.logging.config.file");
        System.out.println(p);
        System.out.println(new File(p).length());
        System.out.println(Logger.getLogger("").getLevel());
    }

【讨论】:

  • 我按照上面的所有步骤进行操作,除了#3 之外,一切看起来都正确。我没有看到活跃的第 3 方记录器列表。那么它们是如何将输出输出到控制台的,它们可以被禁用吗?
  • 我更新了答案以包括一些未列出的原因。是否使用全局记录器?
  • 不幸的是,我不得不让第 3 方开发人员将属性文件直接添加到他们的 jar 中。我奖励积分提供有用的信息和帮助:)
【解决方案3】:

在反编译 jar 以了解如何设置 Log 级别之前,您可以尝试搜索 setLogLevel api 来查找您想要更多调试的组件。

setLogWriter(new PrintWriter(System.out));

【讨论】:

    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2016-02-20
    • 2018-01-26
    相关资源
    最近更新 更多