2012-12-14 4 views
0

자바 코드log4j 구성

public static synchronized void init(String log4jXMLPath) //throws ServletException 
    { 
     try 
     { 
     if (!initialized) // set the global RepositorySelector 
     { 
      defaultRepository = LogManager.getLoggerRepository(); 
      RepositorySelector theSelector = new AppRepositorySelector(); 
      **LogManager.setRepositorySelector(theSelector, guard);** 
      initialized = true; 
     } 
     Hierarchy hierarchy = new Hierarchy(new RootLogger(Level.DEBUG)); 
     //loadLog4JConfig(servletContext, hierarchy); 
     loadLog4JConfig(hierarchy, log4jXMLPath); 
     ClassLoader loader = Thread.currentThread().getContextClassLoader(); 
     repositories.put(loader, hierarchy); 
     } 
     catch (Exception e) 
     { 

     e.printStackTrace(); 
     } 
    } 

LogManager.setRepositorySelector (theSelector, 가드); 자바 코드에서이 줄은 오류

스택 트레이스

18:17:11,189 ERROR [stderr] (MSC service thread 1-2) java.lang.IllegalArgumentException: Attempted to reset the LoggerFactory without possessing the guard. 
18:17:11,190 ERROR [stderr] (MSC service thread 1-2) at org.apache.log4j.LogManager.setRepositorySelector(LogManager.java:164) 
18:17:11,191 ERROR [stderr] (MSC service thread 1-2) at com.mportal.logger.api.AppRepositorySelector.init(AppRepositorySelector.java:73) 
18:17:11,192 ERROR [stderr] (MSC service thread 1-2) at com.mportal.logger.api.MPLoggerImpl.loadLogInstance(MPLoggerImpl.java:64) 
18:17:11,192 ERROR [stderr] (MSC service thread 1-2) at com.mportal.logger.api.MPLoggerImpl.<init>(MPLoggerImpl.java:38) 
18:17:11,192 ERROR [stderr] (MSC service thread 1-2) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
18:17:11,193 ERROR [stderr] (MSC service thread 1-2) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
18:17:11,194 ERROR [stderr] (MSC service thread 1-2) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
18:17:11,194 ERROR [stderr] (MSC service thread 1-2) at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 

어떻게이 일을 해결하기 위해 던지는? 해결책을주십시오.

+1

1) 코드를 올바르게 포맷하십시오. 2)이 오류가 어떤 컨텍스트에서 발생하는지 설명하십시오. 3) 설명없이 스택 추적을 덤프하면 아무에게도 도움을 줄 수 없습니다. –

+0

잘보십시오. http://stackoverflow.com/ 질문/9584787/using-log4j-with-jboss-7-1 JBoss에서 log4j 종속성을 제외해야 할 수도 있습니다 –

답변

1
LogManager.setRepositorySelector(theSelector, guard); 

에서만 observerd 오류가 발생합니다 다른 가드 개체를 사용하여, 하나의 가드를 사용할 수 있습니다

java.lang.IllegalArgumentException: Attempted to reset the LoggerFactory without possessing the guard. 

함수에 매개 변수로 null을 통과 할 수있을 것이다. 아니면 단순히 초기 세트 가드에 대한 참조를 보유하십시오.

문서 상태 :

은 초기에는 더 가드은 null입니다. 가드가 null의 경우,이 메소드를 호출하면 (자), 로거 팩토리 및 가드가 설정됩니다. 이전에 설정 한 가드가 두 번째 매개 변수로 전달되지 않는 한 다음 호출은 IllegalArgumentException을 던집니다.