我正在使用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 logging page表示添加此代码应该有效:
System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
......但它没有效果。我还尝试在调用java时添加以下选项:
-Dorg.apache.commons.logging.simplelog.defaultlog=fatal
......但这也没有效果。
我想我可以在执行此代码时将stderr重定向到/ dev / null,但是可用的hacky解决方案是否可用?
答案 0 :(得分: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安装位置的lib / 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
对于log4j,添加以下log4j.properties会停止来自HtmlUnit的警告。
log4j.logger.com.gargoylesoftware.htmlunit=ERROR
答案 1 :(得分: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);
答案 2 :(得分:9)
尝试将其放入您的代码中:
LogManager.getLogManager().reset();
答案 3 :(得分:3)
将其添加到您的代码中:
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在目标站点被接受或拒绝而发生的大多数日志。
答案 4 :(得分:2)
我正在使用Htmlunit 2.13,以下代码正在努力解决警告。
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);
答案 5 :(得分:1)
尝试编写自己的log4j配置文件,并使htmlunit将其与java选项一起使用:
-Dlog4j.configuration=file:///my/conf/log4j.properties
然后在你的log4j.properties中:
log4j.logger.com.gargoylesoftware.htmlunit=error
答案 6 :(得分:0)
如果使用Spring,Spring默认使用LogBack,因此您可以在“ main / resources /”或“ test / resources”文件夹中创建logback.xml或logback-test.xml。
您可以像这样通过软件包设置日志级别:
<configuration>
<include resource="/org/springframework/boot/logging/logback/base.xml"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="STDOUT"/>
</root>
<logger name="com.mypackage" level="debug"/>
<logger name="com.gargoylesoftware" level="error"/>
</configuration>