Отключение предупреждений HtmlUnit
Знаете ли вы, как можно отключить предупреждения, заметки, ошибки в HtmlUnit?
18 ответов
Поместите это где-нибудь в начале вашего кода, он закроет свой грязный рот:
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);
Арсен.. большое спасибо за ответ.. Использование вашего кода помогло удалить почти все журналы с помощью HtmlUnit. Но одно редактирование помогает удалить их все:
Использование:
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");
НЕ нужно переопределять какой-либо метод, как некоторые другие ответы состояния.
Попробуй это:
java.util.logging.Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
Здесь вы можете получить информацию о том, как манипулировать журналированием HtmlUnit.
Это то, что я добавил в свои log4j.properties, чтобы отключить подробные сообщения отладки от компонентов 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
Я использую приведенный ниже код и его префект.
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);
Просто добавьте в свой log4.properties эту строку log4j.logger.com.gargoylesoftware.htmlunit=fatal
Теперь в htmlunit 2.9 WebClient.setCssErrorHandler(новый 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;
}
Выключите регистраторы. Но это не очень хорошее решение, так как вы можете захотеть иметь некоторые необычные проблемы в журналах.
Я знаю Htmlunit, выдает много неважных исключений, предупреждений и т. Д.
Вы можете подавить несколько из тех, кто использует:
client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);
Это сработало для меня
@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 настроен как проект Spring, и для удаления журналов требуется добавлениеlogback.xml
к моим ресурсам директ. Добавьте следующее какlogback.xml
на ваш main/java/resources
dir - будет выводиться только INFO
операторы журнала уровня и ничего ниже ( когда использовать разные уровни журнала)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->
<!--<logger name="org.springframework.web" level="INFO"/>-->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{20}] %-5level - %msg%n</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>gdaxDesktop.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{20} %-5level - %msg%n</pattern>
</encoder>
</appender>
<root level="info">
<!--<appender-ref ref="FILE"/>-->
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
Попробуйте добавить это в свой код:
LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.NoOpLog");
По сути, регистратор регистрирует журнал в NoOpLog, который не записывает журнал в ошибку, файл или где-либо еще.
Я использую spring-boot, только с этим:
import com.gargoylesoftware.htmlunit.SilentCssErrorHandler;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.javascript.SilentJavaScriptErrorListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class HtmlUnitConfiguration {
@Bean
public WebClient webClient() {
WebClient webClient = new WebClient();
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setJavaScriptErrorListener(new SilentJavaScriptErrorListener());
webClient.setCssErrorHandler(new SilentCssErrorHandler());
return webClient;
}
}
А затем вызов bean-компонента с помощью @Autowired или в конструкторе класса. И без этой строки:
webClient.getOptions().setThrowExceptionOnScriptError(false);
Две строчки под ним вызовут странную ошибку. В этой линии есть магия.
Один из вариантов, который мне пригодился, - это изменить регистратор 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
Я добавляю этот ответ для пользователей журнала:
<!-- LOG "com.gargoylesoftware.htmlunit.javascript*" at OFF (closed) level -->
<logger name="com.gargoylesoftware.htmlunit.javascript"
level="OFF" additivity="false">
<appender-ref ref="RollingFile" />
<appender-ref ref="Console" />
</logger>
Отключение уровня ведения журнала, поскольку предыдущие ответы от ведения журнала apache и ведения журнала java util не сработали для меня (по крайней мере, когда я запускал тесты на своем локальном компьютере с помощью htmlunit).
И передача фиктивного слушателя как javascriptErrorListener для экземпляра WebClient также не работала для меня.
Так что это было единственное решение для закрытия надоедливых журналов исключений 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);
Таким образом, нет необходимости настраивать любой другой Logger.
Попробуйте это, это сработало для меня.
WebClient webClient = new WebClient();
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setCssEnabled(false);