Не удается отключить ведение журнала HtmlUnit

Я использую org.apache.log4j.Logger и хочу отключить отладочные сообщения для htmlunit. Ничто из того, что я делаю, не работает. Я продолжаю получать сообщения отладки Http.wire, Http.headers и т. Д. У меня есть root logger для отладки

Я попытался разместить эту строку в моем коде:

org.apache.log4j.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(org.apache.log4j.Level.OFF);

Я также попытался поместить эту строку в мой файл log4j.properties:

log4j.logger.com.gargoylesoftware.htmlunit=WARN

Это содержимое моего файла log4j.properties:

log4j.logger.com.gargoylesoftware.htmlunit=ERROR

log4j.logger.org.apache.commons.httpclient=ERROR


# Tell the root lodger what appenders and level to use
log4j.rootLogger=DEBUG, A1, A2


##### Console Appender #####

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n


##### File Appender #####

log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=/var/log/mylogfile.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.A2.Append=false

Любая помощь будет оценена.

Редактировать 15.11.16 (Добавление тестового кода)

import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.*;

import org.junit.*;
import static org.junit.Assert.*;

import org.apache.commons.logging.*;
import org.apache.log4j.*;

public class Test01
{
    @Test
    public void homePage() throws Exception
    {
        LogFactory.getFactory().setAttribute("com.gargoylesoftware.htmlunit", "org.apache.commons.logging.impl.Log4JLogger");
        LogFactory.getFactory().setAttribute("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.Log4JLogger");


        org.apache.log4j.Logger.getLogger("com.gargoylesoftware.htmlunit").setLevel(Level.WARN);
        org.apache.log4j.Logger.getLogger("org.apache.commons.httpclient").setLevel(Level.WARN); 

        Logger.getRootLogger().setLevel(Level.DEBUG);


        Logger.getRootLogger().debug("Start");

        WebClient webClient = new WebClient()

        HtmlPage page = webClient.getPage("https://google.com");

        Logger.getRootLogger().debug("End");
    }

2 ответа

Решение

Поэтому после долгих экспериментов и наблюдения за выходом из журнала я понял это. Как выясняется, документация для HttpClient на веб-сайте Apache HTTPCLient не верна (на самом деле существуют неработающие ссылки). Оказывается, что имена регистраторов, используемых HTTPClient, не совпадают с указанными в документе. Правильное имя корня логгера - "http", а не "httpclient", что означает, что все испытания, которые я выполнял, имели нулевой эффект.

Я использую org.apache.httpcomponents.httpclient_4.5.2 и org.apache.httpcomponents.httpcore_4.4.5, которые на сегодняшний день (15.11.16).

Вот пример файла log4j.properties, который позволит точно контролировать ведение журнала HTMLClient

# Tell the root logger what appenders and level to use
log4j.rootLogger=DEBUG, A1, A2


# Controls detailed wire protocol
log4j.logger.org.apache.http.wire=WARN

# Controls headers (good for debugging)
log4j.logger.org.apache.http.headers=WARN

# Controls http context (what you are sending and geting)
log4j.logger.org.apache.http=WARN

# Controls htmlunit details
log4j.logger.com.gargoylesoftware.htmlunit=WARN


##### Console Appender #####

log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n


##### File Appender #####

log4j.appender.A2=org.apache.log4j.FileAppender
log4j.appender.A2.File=mylogfile.log
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n
log4j.appender.A2.Append=false

Для log4j вы должны установить log4j.logger.com.gargoylesoftware.htmlunit в ERROR:

log4j.logger.com.gargoylesoftware.htmlunit=ERROR

Второй вариант: добавьте это в свой код после объявления вашего веб-клиента:

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);
Другие вопросы по тегам