2016-11-07 12 views
1

저는 org.apache.log4j.Logger를 사용 중이며 htmlunit에 대한 디버그 메시지를 해제하려고합니다. 내가하는 일은 아무 것도없는 것처럼 보인다. 나는 계속 Http.wire, Http.headers, etc 디버그 메시지를 받고있다. 나는 루트 로거는 내 코드에서이 줄을 배치하려고HtmlUnit 로깅을 끌 수 없습니다.

을 디버깅 설정 :

log4j.logger.com.gargoylesoftware.htmlunit=WARN 

이것은이다 : 나는 또한 나의 log4j.properties 파일에이 줄을 배치하려고

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

내 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

그래서 많은 실험과 로그 관찰 출력 나는 이것을 알아 냈다. 사실 Apache HTTPCLient website에있는 HttpClient의 설명서가 올바르지 않습니다 (실제로 링크가 끊어짐). HTTPClient가 사용하는 로거의 이름이 문서에 지정된대로 표시되지 않습니다. 올바른 로거 루트 이름은 "httpclient"가 아니라 "http"입니다. 이는 수행중인 모든 시도가 0의 효과가 있음을 의미합니다.

오늘 (11/15/16) 현재 org.apache.httpcomponents.httpclient_4.5.2 및 org.apache.httpcomponents.httpcore_4.4.5를 사용하고 있습니다. 여기

는 도움을

# 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.htmlunitERROR에 :

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

감사 HTMLClient 로깅의 미세 제어 할 수 있도록 예제 log4j.properties 파일입니다. 속성 파일의 log4j.logger.com.gargoylesoftware.htmlunit = ERROR는 아무 작업도 수행하지 않습니다. 코드 스 니펫은 작동하지만 루트 로거의 디버그 로그를 끕니다. 나는 행운없이 SimpleLog와 Log4JLogger를 시도했다. 내 log4j.properties 파일의 설정으로 여러 로거에 대해 다른 레벨을 설정할 수없는 이유를 이해하는 데 문제가 있습니다. Log4j.properties 파일을 사용하여 원본 질문을 업데이트했습니다. – zappullae

+0

BTW. Authorize.net에서 HTML 와이어 세부 정보를 로깅하는 것과 동일한 문제가 있습니다. – zappullae

+0

이것을 실험 한 후에는 루트 로거 만 사용됩니다. org.apache.commons.logging.Log 및 com.gargoylesoftware.html 유닛의 레벨 및 속성 설정은 영향을 미치지 않습니다. 작동하는 유일한 방법은 log4j.properties 파일에서 레벨을 설정하거나 Logger.getRootLogger(). setLevel (Level.WARN)을 수행하는 경우입니다. 이러한 솔루션은 모두 제어하려는 개별 로그뿐만 아니라 모든 로깅에 영향을 미칩니다. 이게 그렇게 힘들지는 않을거야, 내가 놓친 게 있니? – zappullae