2012-11-12 4 views
0

log4j의 현재 버전 2.0 베타를 사용하려고합니다. log4j에 필요한 모든 jar 파일을 포함 시켰습니다. 더 이상log4j 2.0을 초기화하는 방법은 무엇입니까? LogManager.getContext가 널 포인터 예외를 발생시킵니다.

Exception in thread "main" java.lang.NullPointerException 
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:203) 
    at org.apache.log4j.LogManager$PrivateManager.getContext(LogManager.java:62) 
    at org.apache.log4j.LogManager.reconfigure(LogManager.java:50) 
    at org.apache.log4j.BasicConfigurator.configure(BasicConfigurator.java:28) 

어느

org.apache.log4j.BasicConfigurator.configure(); 

private static final Logger log = LogManager.getLogger("..."); 

일 : 응용 프로그램을 시작하는 것은 단지을 제공합니다.

누구에게 어떤 문제가 있는지 알 수 있습니까?

인사말

마이크

+0

'log4j-api - *. jar' 옆에'log4j-core - * .jar' 항아리를 추가 했습니까? –

+0

만약 그가 추가하지 않았다면 그는 ClassNotFoundException을 얻을 것이다. –

답변

1

귀하의 문제는 BasicConfigurator는 log4j에 v2를 구현되지 않는다는 점이다. log4j 1.2에서 log4j 2로가는 브리지를 통해 BasicConfigurator 클래스에 액세스 할 수 있습니다. Log4j v2를 사용하는 경우 더 이상 BasicConfigurator를 사용할 수 없습니다.

브리지 라이브러리의 이름은 log4j-1.2-api-2.2.jar입니다. 이 질문 이후 몇 년이 지났습니다.

따라서 Bridge를 사용하면 대부분의 Log4j 1.2 클래스에 액세스 할 수 있지만 그 뒤에 구현이 없을 수도 있습니다. BasicConfigurator는 그 상황의 예입니다. 이것이 널 포인터 예외를 얻는 이유입니다.

비슷하지만 레벨이 디버그가 아닌 오류로 설정되어 있으면 정상적으로 구성 할 필요가 없습니다. Error보다 낮은 레벨에서 로그 메시지를 원한다면, 자신 만의 BasicConfigurator 버전을 만들어야하거나, classpath에 log4j2. [xml | yaml | json] 파일을 넣어야합니다.

관련 문제