无法关闭HtmlUnit日志记录消息

Sea*_*ean 14 logging htmlunit

我正在使用HtmlUnit与通过Ajax与服务器交互的网页进行交互.在Ajax代码启动后不久,HtmlUnit会生成以下两条日志消息:

WARNING: Ignoring XMLHttpRequest.setRequestHeader for Content-length: it is a restricted header
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxFunction_setRequestHeader
WARNING: Ignoring XMLHttpRequest.setRequestHeader for Connection: it is a restricted header
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status

......接着是这个消息,重复了六次:

SEVERE: XMLHttpRequest.status was retrieved before the response was available.
Mar 3, 2011 3:32:47 PM com.gargoylesoftware.htmlunit.javascript.host.xml.XMLHttpRequest jsxGet_status

我无法弄清楚如何关闭这些消息.浏览代码表明它们是通过直接调用记录器产生的,而不是通过我可以提供无操作实现的处理程序对象产生的,正如我已经为CSS错误所做的那样.该的HtmlUnit登录页面中显示,添加此代码应工作:

System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
Run Code Online (Sandbox Code Playgroud)

......但它没有效果.我还尝试在调用java时添加以下选项:

-Dorg.apache.commons.logging.simplelog.defaultlog=fatal
Run Code Online (Sandbox Code Playgroud)

......但这也没有效果.

我想我可以在执行此代码时将stderr重定向到/ dev/null,但是可用的hacky解决方案是什么?

khy*_*ylo 13

我也有这个问题..答案取决于日志记录系统公共日志记录在引擎盖下使用.(因为common-logging只是一个包装器).请参阅以下 http://commons.apache.org/proper/commons-logging/guide.html#Configuring_The_Underlying_Logging_System

您在上面提到的属性(org.apache.commons.logging.simplelog.defaultlog)只有在使用简单记录器时才有效.如果您在JDK 1.4或更高版本上运行,则它应该默认使用JDK日志记录.在这种情况下,它默认使用JRE安装位置的l​​ib/logging.properties.

在我的情况下,我在类路径中有Log4j,因此它默认为.

要消除所有这些的随机性,您可以自己明确设置Logger.在类路径中创建一个commons-logging.properties文件,并传入记录器以使用例如

# JDK Logging
#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
# Log4j logging (also required log4j.jar to be in classpath)
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
Run Code Online (Sandbox Code Playgroud)

对于log4j,添加以下log4j.properties会停止来自HtmlUnit的警告.

log4j.logger.com.gargoylesoftware.htmlunit=ERROR
Run Code Online (Sandbox Code Playgroud)


jet*_* ma 11

您还可以使用:

org.apache.log4j.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(org.apache.log4j.Level.FATAL);
java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(java.util.logging.Level.SEVERE);
Run Code Online (Sandbox Code Playgroud)


小智 9

试着把它放在你的代码中:

LogManager.getLogManager().reset();
Run Code Online (Sandbox Code Playgroud)