Savez-vous comment désactiver les avertissements, les notes et les erreurs dans HtmlUnit?
Mettez cela quelque part autour du début de votre code; il fermera sa bouche sale:
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);
Le code de réponse d'Arsen Zahray a aidé à supprimer presque tous les journaux générés par HtmlUnit.
Mais une modification permet de les supprimer tous. Utilisation:
Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
au lieu de:
Java.util.logging.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.OFF);
Pour supprimer toutes les sorties de la dernière version de HtmlUnit, il vous suffit d'ajouter ces lignes dans un bloc statique ou dans votre classe principale:
Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
System.setProperty("org.Apache.commons.logging.Log", "org.Apache.commons.logging.impl.NoOpLog");
Il n'est PAS nécessaire de remplacer une méthode comme le disent d'autres réponses.
Ici, vous pouvez obtenir des informations sur comment manipuler la journalisation de HtmlUnit .
Voici ce que j'ai ajouté à mon log4j.properties
afin de désactiver les messages de débogage détaillés des composants HtmlUnit:
# 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
Essayez le code suivant pour désactiver le niveau de journalisation:
Java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
J'utilise le code ci-dessous et cela fonctionne parfaitement:
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);
Éteignez les enregistreurs. Mais ce n'est pas une bonne solution, car vous voudrez peut-être avoir des problèmes inhabituels dans les journaux.
Je sais que HtmlUnit produit de nombreuses exceptions, avertissements, etc. sans importance. Vous pouvez supprimer quelques-uns de ceux qui utilisent:
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);
Ajoutez simplement cette chaîne à votre log4.properties
:
log4j.logger.com.gargoylesoftware.htmlunit=fatal
Cela a fonctionné pour moi:
@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");
Désormais, dans HtmlUnit 2.9, WebClient.setCssErrorHandler(new SilentCssErrorHandler())
peut facilement ignorer les avertissements et les erreurs. Par exemple:
@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;
}
Essayez d'ajouter ceci à votre code:
LogFactory.getFactory().setAttribute("org.Apache.commons.logging.Log", "org.Apache.commons.logging.impl.NoOpLog");
Fondamentalement, cela rend le journal de l'enregistreur dans NoOpLog
, qui n'écrit les informations du journal nulle part.
Si vous n'avez pas besoin du support JavaScript, c'est la manière la plus simple de le désactiver:
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) {
}
});
Vous désactivez également les exceptions et vous connectez aux codes d'état défaillants, JavaScript, les erreurs CSS et les erreurs d'analyse HTML.
Si vous avez besoin du support JavaScript, vous pouvez utiliser une implémentation personnalisée pour les erreurs 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) {
}
});
Si vous n'en avez pas besoin, vous pouvez également le désactiver:
client.getOptions().setCssEnabled(false);
Il n'est donc pas nécessaire de configurer un autre enregistreur.
Une option qui a bien fonctionné pour moi est de changer l'enregistreur HtmlUnit pour se connecter à un fichier différent juste pour que j'ai ces erreurs au cas où j'aurais besoin de le renvoyer un certain temps et qu'il n'encombre pas non plus mes journaux principaux. Ci-dessous est le log4j
modification que j'ai apportée à 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