2011-03-03 125 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