HtmlUnitの警告、メモ、エラーをオフにする方法を知っていますか?
これをコードの先頭付近に置きます。汚れた口を閉じます。
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);
webClient = new WebClient(bv);
webClient.setCssEnabled(false);
webClient.setIncorrectnessListener(new IncorrectnessListener() {
@Override
public void notify(String arg0, Object arg1) {
// TODO Auto-generated method stub
}
});
webClient.setCssErrorHandler(new ErrorHandler() {
@Override
public void warning(CSSParseException exception) throws CSSException {
// TODO Auto-generated method stub
}
@Override
public void fatalError(CSSParseException exception) throws CSSException {
// TODO Auto-generated method stub
}
@Override
public void error(CSSParseException exception) throws CSSException {
// TODO Auto-generated method stub
}
});
webClient.setJavaScriptErrorListener(new JavaScriptErrorListener() {
@Override
public void timeoutError(HtmlPage arg0, long arg1, long arg2) {
// TODO Auto-generated method stub
}
@Override
public void scriptException(HtmlPage arg0, ScriptException arg1) {
// TODO Auto-generated method stub
}
@Override
public void malformedScriptURL(HtmlPage arg0, String arg1, MalformedURLException arg2) {
// TODO Auto-generated method stub
}
@Override
public void loadScriptError(HtmlPage arg0, URL arg1, Exception arg2) {
// TODO Auto-generated method stub
}
});
webClient.setHTMLParserListener(new HTMLParserListener() {
@Override
public void warning(String arg0, URL arg1, int arg2, int arg3, String arg4) {
// TODO Auto-generated method stub
}
@Override
public void error(String arg0, URL arg1, int arg2, int arg3, String arg4) {
// TODO Auto-generated method stub
}
});
webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setThrowExceptionOnScriptError(false);
Arsen Zahray's answer のコードは、HtmlUnitによって生成されたほとんどすべてのログを削除するのに役立ちました。
ただし、1回の編集ですべてを削除できます。使用する:
Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
の代わりに:
Java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
最新バージョンのHtmlUnitからすべての出力を削除するには、これらの行を静的ブロックまたはメインクラスに追加するだけです。
Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
System.setProperty("org.Apache.commons.logging.Log", "org.Apache.commons.logging.impl.NoOpLog");
他の回答が示すようにメソッドをオーバーライドする必要はありません。
ここで、 HtmlUnitのロギングの操作方法 に関する情報を取得できます。
これは、HtmlUnitコンポーネントからの詳細なデバッグメッセージを無効にするためにlog4j.properties
に追加したものです。
# Set specific logger levels.
log4j.logger.org.mortbay.log=fatal
log4j.logger.org.Apache.http=fatal
log4j.logger.org.Apache.http.headers=fatal
log4j.logger.org.Apache.http.wire=fatal
# For HttpClient 3, which is used by FirefoxDriver
log4j.logger.httpclient.wire=fatal
log4j.logger.org.Apache.commons=fatal
log4j.logger.com.gargoylesoftware.htmlunit=fatal
log4j.logger.com.gargoylesoftware.htmlunit.WebTestCase=fatal
# Change this to TRACE when enabling the debugger.
log4j.logger.com.gargoylesoftware.htmlunit.javascript.DebugFrameImpl=fatal
次のコードを試して、ログレベルをオフにします。
Java.util.logging.Logger.getLogger("com.gargoylesoftware").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);
ロガーをオフにします。ただし、ログには一般的でない問題が発生する可能性があるため、これは良い解決策ではありません。
HtmlUnitが重要ではない例外や警告などを大量に生成することは知っています。
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);
この文字列をlog4.properties
に追加するだけです:
log4j.logger.com.gargoylesoftware.htmlunit=fatal
これは私のために働いた:
@Test
public void homePage() throws Exception {
final WebClient webClient = new WebClient();
webClient.setThrowExceptionOnScriptError(false);
final HtmlPage page = webClient.getPage("http://localhost:8080/web/guest/home");
HtmlUnit 2.9では、WebClient.setCssErrorHandler(new SilentCssErrorHandler())
は警告とエラーを便利に無視できます。例えば:
@Override
protected WebClient modifyWebClient(WebClient client) {
// currently does nothing, but may be changed in future versions
WebClient modifiedClient = super.modifyWebClient(client);
modifiedClient.getOptions().setThrowExceptionOnScriptError(false);
modifiedClient.setCssErrorHandler(new SilentCssErrorHandler());
return modifiedClient;
}
これをコードに追加してみてください:
LogFactory.getFactory().setAttribute("org.Apache.commons.logging.Log", "org.Apache.commons.logging.impl.NoOpLog");
基本的に、これによりロガーのログはNoOpLog
になり、ログ情報はどこにも書き込まれません。
JavaScriptのサポートが必要ない場合は、JavaScriptを無効にする最も簡単な方法です。
WebClient client = new WebClient(BrowserVersion.BEST_SUPPORTED);
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setJavaScriptEnabled(false);
client.setCssErrorHandler(new SilentCssErrorHandler());
client.setHTMLParserListener(new HTMLParserListener() {
@Override
public void error(String message, URL url, String html, int line, int column, String key) {
}
@Override
public void warning(String message, URL url, String html, int line, int column, String key) {
}
});
また、例外を無効にし、失敗したステータスコード、JavaScript、CSSエラー、HTML解析エラーにログオンします。
JavaScriptサポートが必要な場合は、JavaScriptエラーのカスタム実装を使用できます。
client.setJavaScriptErrorListener(new JavaScriptErrorListener() {
@Override
public void timeoutError(HtmlPage arg0, long arg1, long arg2) {
}
@Override
public void scriptException(HtmlPage arg0, ScriptException arg1) {
}
@Override
public void malformedScriptURL(HtmlPage arg0, String arg1, MalformedURLException arg2) {
}
@Override
public void loadScriptError(HtmlPage arg0, URL arg1, Exception arg2) {
}
});
不要な場合は、無効にすることもできます。
client.getOptions().setCssEnabled(false);
したがって、他のロガーを設定する必要はありません。
私にとってうまくいった1つのオプションは、HtmlUnitロガーを別のファイルに記録するように変更することです以下はlog4j
私がlog4j.properties
:
log4j.logger.com.gargoylesoftware.htmlunit=ERROR, HTMLUNIT
log4j.additivity.com.gargoylesoftware.htmlunit=false
log4j.appender.HTMLUNIT = org.Apache.log4j.RollingFileAppender
log4j.appender.HTMLUNIT.layout=org.Apache.log4j.PatternLayout
log4j.appender.HTMLUNIT.layout.ConversionPattern=%m%n
log4j.appender.HTMLUNIT.File=logs/HtmlUnitLog4j.log
log4j.appender.HTMLUNIT.MaxFileSize=5MB
log4j.appender.HTMLUNIT.MaxBackupIndex=5