2013-10-14 1 views
3

RackSpace의 여러 Tomcat 7 서버에서 실행되는 Spring MVC 애플리케이션이 있습니다.Log4j Logger Tomcat에 배포 할 때 Bean의 NullPointerException이 발생했습니다.

import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
... 
protected final transient Logger logger = LoggerFactory.getLogger(this.getClass()); 

우리는 우리의 MVC 컨트롤러에 대한 로깅 항목을 모두 얻을, 가끔 다음 호출을 우리의 모델 클래스 (자바 빈즈)를 withing에 있지만에서 로깅의 가장 : 각 클래스에서 우리는 다음과 유사 뭔가를 :

logger.debug("some logging"); 

NullPointerException을 발생시킵니다. 분명히 "로거"는 null이지만 왜 그렇게 될지 설명이 없습니다. 클래스 선언의 상단에서 초기화되므로 혼란 스럽습니다.

답변

2

그냥 생각에 대한 인수로 this.getClass()하지만 THE_ACTUAL_CLASS.class 사용하지 않는? 그것은 당신의 로거를 잃어 버리게 만들 것입니다.

그런 경우 로거를 static으로 선언하지 않으시겠습니까? 그들은 당신이 그들이 항상 한 당신의 JVM 그대로 (다할 것을 믿을 수 작동하면

http://slf4j.org/faq.html#declared_static

당신이 그들 정적으로 선언하는 경우 : 여기에 적절한 방법을 결정하는 데 도움을 줄 수 slf4j.org에서 몇 가지 정보입니다 일).

+0

그게 정확히 일어난 일입니다. 고맙습니다! – pconrey

1

transientstatic으로 바꾸어보세요.

그런 다음 당신은 당신이 직렬화/역 직렬화되지 않습니다에 로그인하는 클래스의 인스턴스 확신의 getLogger() 메소드

관련 문제