Logging Can';t关闭HtmlUnit日志消息

Logging Can';t关闭HtmlUnit日志消息,logging,htmlunit,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 j

我使用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 …但它没有效果。我还尝试在调用java时添加以下选项:

-Dorg.apache.commons.logging.simplelog.defaultlog=fatal
…但这也没有效果


我想我可以在执行这段代码时将stderr重定向到/dev/null,但是有没有不那么骇人的解决方案呢?

我也有这个问题。。 答案取决于在引擎盖下使用什么日志系统commons logging。(因为通用日志只是一个包装器)。见下文

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

在我的例子中,类路径中有Log4j,所以它默认为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

尝试在代码中添加以下内容:

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);
LogManager.getLogManager().reset();

尝试编写您自己的log4j配置文件,并使htmlunit与java选项一起使用:

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

然后在log4j.properties中:

log4j.logger.com.gargoylesoftware.htmlunit=error
您还可以使用:

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

我正在使用Htmlunit 2.13,下面的代码正在处理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);

将此添加到代码中:

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在目标站点被接受或拒绝而发生的大多数日志。

如果使用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>

%d{HH:mm:ss.SSS}[%thread]-5级别%logger{36}-%msg%n

对于我来说,这是在大量测试中唯一可以清除控制台的东西。。。。。它几乎可以复制
<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>