2011-03-03 130 views
13

我正在使用HtmlUnit与通过Ajax与服务器交互的网页进行交互。 Ajax代码开始不久之后,产生的HtmlUnit这两个日志消息:无法关闭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

...跟此消息,重复6次:

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 logging page表明,添加此代码应工作:

System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal"); 

...但它没有任何效果。我也尝试添加以下选项,我调用java:

-Dorg.apache.commons.logging.simplelog.defaultlog=fatal 

...但也没有效果。

我想我可以在这段代码执行时将stderr重定向到/ dev/null,但是可用的解决方案更少了吗?

+0

可能重复的[关闭HtmlUnit警告](http://stackoverflow.com/questions/3600557/turning-htmlunit-warnings-off) – 2016-05-13 03:15:33

回答

13

我也有这个问题.. 答案取决于什么日志记录系统公用日志使用在引擎盖下。 (因为通用日志只是一个包装)。见你提到上述(org.apache.commons.logging.simplelog.defaultlog)如果使用了简单的记录仪应该只是有效以下 http://commons.apache.org/proper/commons-logging/guide.html#Configuring_The_Underlying_Logging_System

属性。如果您运行的是JDK 1.4或更高版本,则应默认使用JDK日志记录。在这种情况下,它默认使用JRE安装位置中的lib/logging.properties。

在我的情况下,我在类路径中有Log4j,所以默认为这样。

要消除所有这些的随机性,您可以自己设置记录器。在类路径中创建一个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 

对于log4j,添加以下log4j.properties将停止HtmlUnit的警告。

log4j.logger.com.gargoylesoftware.htmlunit=ERROR 
9

尝试把这个在你的代码:

LogManager.getLogManager().reset(); 
1

试图通过编写自己的log4j的配置文件,并制作的HtmlUnit与Java选项一起使用:

-Dlog4j.configuration=file:///my/conf/log4j.properties

然后在你的log4j.properties中:

log4j.logger.com.gargoylesoftware.htmlunit=error 
10

您还可以使用:

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); 
+0

对我来说,这是唯一的事情之间进行了大量的测试,清除控制台.....这几乎是和平的 – 2015-01-17 20:22:15

2

我使用2.13的HtmlUnit,和下面的代码正在努力trunoff警告。

LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog"); 
    java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF); 
    java.util.logging.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.OFF); 
2

添加到这个代码: LogFactory.getFactory()的setAttribute( “org.apache.commons.logging.Log”, “org.apache.commons.logging.impl.NoOpLog”)。 java.util.logging.Logger.getLogger( “com.gargoylesoftware.htmlunit”)setLevel(Level.OFF)。 java.util.logging.Logger.getLogger( “org.apache.commons.httpclient”)setLevel(Level.OFF)。 java.util.logging.Logger.getLogger( “org.apache.http.client.protocol.ResponseProcessCookies”)setLevel(Level.OFF)。

最后一行将关闭由于Cookie在目标站点被接受或拒绝而发生的大部分日志。

+0

脏解决方案,但工作很好,谢谢! – PizzaFrog 2017-02-02 02:26:39