ProgramingTip

HtmlUnit 경고 해제

bestdevel 2020. 12. 13. 10:22
반응형

HtmlUnit 경고 해제


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의 답변 에있는 코드는 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");

다른 답변 상태로 어떤 방법도 재정의 할 필요가 없습니다.


여기 에서 HtmlUnit 로깅을 조작하는 방법대한 정보를 얻을 수 있습니다 .

이것은 log4j.propertiesHtmlUnit 구성 요소에서 부담 메시지를하기 위해 내가 추가 한 것 입니다.

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

다음을 추가하십시오 log4.properties.

log4j.logger.com.gargoylesoftware.htmlunit=fatal

로거를. 그러나 로그에 흔하지 않은 문제가 있으므로 좋은 해결책이 아닙니다.

HtmlUnit은 중요하지 않은 예외, 경고 등을 많이 생성한다는 것을 알고 있습니다. 다음을 사용하여 몇 가지를 사용할 수 있습니다.

client.getOptions().setThrowExceptionOnFailingStatusCode(false);
client.getOptions().setThrowExceptionOnScriptError(false);
client.getOptions().setPrintContentOnFailingStatusCode(false);

상기 보고이 문서를 .

테스트 스위트에서 사용하는 샘플 log4 파일이 있습니다. 여기 에서 찾을 수 있으며 원하는 경우 모든 것을 비활성화 할 수 있습니다.


이것은 나를 위해 일했습니다.

@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로그 정보를 어디에도 쓰지 작성합니다.


나를 위해 잘 작동 한 한 가지 옵션은 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

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

따라서 다른 로거를 구성 할 필요가 없습니다.

참고 URL : https://stackoverflow.com/questions/3600557/turning-htmlunit-warnings-off

반응형