2013-03-19 1 views
1

내 응용 프로그램에서 log4j를 설정하려고하고 제 3 자 JAR 중 하나가 내 로그 수준을 "OFF"로 계속 유지하는 것 같습니다. 해당 라이브러리의 코드가 실행될 때만 발생합니다. 이름을 알고있는 로거를 사용하지 않아서 어떻게 할 수 있는지 모르겠지만 루트 로거를 사용하지 않습니다. 나는 이것에 5 시간을 보냈으며 지금까지 나의 유일한 성취는 9000 이상의 좌절 수준을 얻는 것이었다.log4j 간섭 수준이 "OFF"로 설정되어 있습니다.

나는 윈도우 7 64 비트, 자바 6 u23에 최신 Tomcat (7.0.37)을 사용하고있다. .

log4j.properties : 테스트를 위해 내 서블릿에서 다음

log4j.logger.com.foo.bar.SearchAndReport=TRACE, stdout, file 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n 

log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=D:/logTest.log 
log4j.appender.file.MaxFileSize=100KB 
log4j.appender.file.MaxBackupIndex=1 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=[%p] %d{dd MMM yyyy HH:mm:ss,SSS} - %C{2}.%M() - %m %n 

는 내가 가진 :

Logger log = Logger.getLogger(SearchAndReport.class); 
System.out.println(log.getLevel()); 

이 코드마다의 doPost를 실행 또는의 doGet가 실행되고, 레벨이 수준에 유지 제 3 자 코드가 실행될 때까지 (TRACE)를 설정하고 해제합니다.

  1. 어떻게 다른 로거 로거 방해 할 수있는 나 자신의 이름과 설정 한 :

    내 질문은?

  2. 어떻게 이런 일이 일어나지 않게하고 레벨을 강제로 설정할 수 있습니까?

감사합니다 :)

+0

사용중인 타사 라이브러리는 무엇입니까? –

답변

2
  1. Log4j의 구성은, 병합되지 않습니다 다른 구성이 존재하고 대신에 당신의 읽기, 또는 구성이 덮어 두 것으로 보인다. Log4j 설정 파일을 JAR에 임베드하는 것은 많은 비슷한 문제의 근원이다.

  2. 코드에서 org.apache.log4j.PropertyConfigurator 또는 org.apache.log4j.xml.DOMConfigurator을 사용하여 구성을 다시로드 할 수 있습니다. 타사 코드에서 사용하지 않는지 확인하십시오.

+0

감사합니다. 정말 도움이됩니다! 방금 의심되는 JAR 파일을 추출하고 log4j.xml을 찾았습니다. xml 파일이 속성 파일보다 우선 순위가 높다고 생각합니까? 만약 내가 XML을 만들었다면, 여전히 오버라이드하겠습니까? – Provster

+1

log4j.xml이 2 개있는 경우 클래스 경로의 첫 번째 JAR에 따라 다릅니다. Log4j 구성을 유틸리티 라이브러리에 임베드하는 것은 매우 나쁜 습관이라고 써드 파티 제공 업체에 알려야합니다. 최종 사용자는 무엇을 기록해야하는지 결정해야합니다. –

관련 문제