2013-10-20 5 views
1

configure Log4j2에서 까지 작업 디렉토리의 XML 파일에서 구성을 읽을 수 없습니다.Log4j2를 런타임 경로 (작업 디렉토리)로 구성하는 방법 클래스 경로가 아닌 XML 파일

나는이 문서가 말한대로 시스템 속성을 설정하려고했다 :

의 log4j는 "log4j.configurationFile"시스템 등록 정보를 검사하고, 는 설정하면, 일치하는 ConfigurationFactory를 사용하여 구성을로드하려고 시도합니다 상대 및 절대 경로와 main 방법에서도 메인 클래스 정적 초기화 블록 파일 확장자

, :

,369,136

  • System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "log4j2.xml");"log4j.configurationFile" 대신 XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY 그 작동의 아무것도 또한
  • 답변

    5

    작품 잘. 메인 메소드가있는 클래스에

    static Logger logger = LogManager.getLogger(Runtimeconfig.class); 
    

    를 사용할 때

    public class Runtimeconfig { 
        public static void main(String args[]) { 
         System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml"); 
         new LoggedClass().logMe(); 
        } 
    } 
    
    
    public class LoggedClass { 
        static Logger logger = LogManager.getLogger(LoggedClass.class); 
    
        public void logMe() { 
         logger.info("I'm logged!"); 
        } 
    } 
    

    이 처음으로 초기화 할 경우 정적 필드 있기 때문에 나누기.

    무엇도 작동하면 다음과

    public class Runtimeconfig { 
    
        static { 
         System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY, "/home/peter/config/log4j2.xml"); 
        } 
    
        static Logger logger = LogManager.getLogger(Runtimeconfig.class); 
    
        public static void main(String args[]) { 
    
         new LoggedClass().logMe(); 
         new Runtimeconfig().logger.info("I'm logged too"); 
        } 
    } 
    

    하지만 당신은 정적 필드 초기화 실행 순서에 의존하고 있습니다.

    +0

    딱딱한, 내가 정적 priotity에 대해 알고 있지만, 실수로 정적 initializer 대신 instancef initialize를 사용합니다 :) –

    관련 문제