【问题标题】:How to suppress htmlunit (Java library) warning/error messages?如何抑制 htmlunit(Java 库)警告/错误消息?
【发布时间】:2017-03-24 09:43:59
【问题描述】:

我正在使用 htmlunit [http://htmlunit.sourceforge.net/],它会发出一堆警告/错误:

2017 年 3 月 24 日下午 6:37:30 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'text/javascript'。 2017 年 3 月 24 日下午 6:37:31 com.gargoylesoftware.htmlunit.html.InputElementFactory createElementNS 信息:错误的输入类型:“日期时间”,创建文本输入 2017 年 3 月 24 日下午 6:37:31 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'application/x-javascript'。 2017 年 3 月 24 日下午 6:37:32 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'application/x-javascript'。 2017 年 3 月 24 日下午 6:37:34 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'text/javascript'。 2017 年 3 月 24 日下午 6:37:34 com.gargoylesoftware.htmlunit.javascript.StrictErrorReporter runtimeError 严重:runtimeError:消息=[指定了无效或非法的选择器(选择器:'*,:x'错误:无效的选择器::x)。] sourceName=[https://www.example.com/bundles/jquery?v=u8J3xxyrazUhSJl-OWRJ6I82HpC6Fs7PQ0-l8XzoZXY1] line=[1] lineSource=[null] lineOffset =[0] 2017 年 3 月 24 日下午 6:37:35 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'text/javascript'。 2017 年 3 月 24 日下午 6:37:35 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'text/javascript'。 2017 年 3 月 24 日下午 6:37:35 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'text/javascript'。 2017 年 3 月 24 日下午 6:37:36 com.gargoylesoftware.htmlunit.IncorrectnessListenerImpl 通知 警告:遇到过时的内容类型:'text/javascript'。 2017 年 3 月 24 日下午 6:37:43 com.gargoylesoftware.htmlunit.javascript.host.dom.Document createElement 信息:createElement:提供字符串 'iframe name="rufous-frame-29_-1">https://platform.twitter.com/widgets.js] line=[9] lineSource=[null] lineOffset=[0]

我查看了其他资源并尝试通过以下方式将其关闭:

    Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
    Logger.getLogger("org.apache.http").setLevel(Level.OFF);

和:

        final WebClient webClient = new WebClient(BrowserVersion.EDGE);

但它不起作用

还有什么方法可以抑制这些警告/错误消息?

【问题讨论】:

  • 确保在调用 HtmlUnit 之前设置记录器。如果没有,请发布您的完整代码
  • 谢谢,我把代码和另一行(见我的回答)和错误/sarnings停止出现。

标签: java logging htmlunit java.util.logging


【解决方案1】:

如果您不打算在“logging.properties”文件中将记录器设置为OFF,那么在将级别设置为OFF 之前,您需要pin the loggers with a hard reference

这是一个基于您的代码的更正示例:

private static final Logger[] PINNED_LOGGERS;
static {
    System.setProperty("org.apache.commons.logging.simplelog.defaultlog", "fatal");
    PINNED_LOGGERS = new Logger[]{
        Logger.getLogger("com.gargoylesoftware.htmlunit"),
        Logger.getLogger("org.apache.http")
    };

    for (Logger l : PINNED_LOGGERS) {
        l.setLevel(Level.OFF);
    }
}

【讨论】:

    【解决方案2】:

    我将以下内容放在应用程序的开头并停止错误/警告:

    System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
    Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
    Logger.getLogger("org.apache.http").setLevel(Level.OFF);
    

    【讨论】:

    • 您应该先pin those loggers in memory,然后再将它们设置为OFF。否则,您可能会丢失刚刚应用的那些设置。
    • 我不明白。我不需要保留这些日志。
    • 如果在将记录器设置为OFF 之前,某些代码未固定记录器,记录器可能会被垃圾收集。如果这种情况发生在 htmlunit 固定它们之前,就好像你从未将它们设置为 OFF
    • 是的,我看到他们又出现了。很烦人,就像你说的那样。我也不明白你给我的链接。保留这些日志的最简单方法是什么?
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 2012-02-09
    相关资源
    最近更新 更多