2016-11-07 6 views
1

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

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

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 

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

Редактировать 11/15/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"); 
    } 

ответ

0

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

Я использую org.apache.httpcomponents.httpclient_4.5.2 и org.apache.httpcomponents.httpcore_4.4.5 который на сегодняшний день (11/15/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 
0

Для 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); 
+0

Спасибо за помощь. log4j.logger.com.gargoylesoftware.htmlunit = ERROR в файле свойств ничего не делает. Фрагменты кода работают, но он отключает журналы отладки корневого регистратора. Я пробовал SimpleLog, а также Log4JLogger без везения. У меня возникли проблемы с пониманием того, почему параметры в файле log4j.properties не могут устанавливать разные уровни для разных регистраторов. Я обновил свой исходный вопрос с помощью файла log4j.properties, который я использую. – zappullae

+0

BTW. У меня есть та же проблема с авторизацией журналов html Authorize.net. – zappullae

+0

После эксперимента с этим кажется, что используется только корневой регистратор. Установка уровней и атрибутов org.apache.commons.logging.Log и com.gargoylesoftware.htmlunit не влияет. Единственное, что работает, - это установить уровень в файле log4j.properties или выполнить Logger.getRootLogger(). SetLevel (Level.WARN). Оба этих решения влияют на все протоколирование не только отдельных, которые я хотел бы контролировать. Это не может быть так трудно сделать, я что-то упустил? – zappullae