2014-02-25 2 views
29

LOG4J에서 속성 대체의 기본값을 제공 할 방법이 있는지 궁금합니다.Log4J2 속성 대체 - 기본값

Java 시스템 속성에서 파일 경로를 전달한 다음 "$ {env : mySystemProperty}"와 함께 사용하고 싶습니다. 그러나 개발자가이 속성을 설정하는 것을 잊어 버린 경우 어떻게해야합니까? 그런 다음 log4j2.xml에 의미있는 기본값을 정의하고 싶습니다.

어떻게하면이 기능을 얻을 수 있습니까?

편집 :

ENV 대체 나를 위해 작동하지 않습니다

standalone.conf

-DoauthLoginLogPath=/path/oauth2.log 

내가 볼 수

<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true"> 
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true"> 

log44j2.xml은 제이보스 콘솔 속성, 서버를 다시 시작했지만 완료 할 수 없습니다. http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution 보면

답변

42

기본 속성지도

구성 파일의 기본 속성 맵을 지정할 수 있습니다. 이 시스템 프로퍼티 -DoauthLoginLogPath=/path/oauth2.log 사용하여 응용 프로그램을 시작하면, fileName 값 펜더 파일이 첫 번째 시스템 등록 정보에서 조회 할 것이다, 그리고

<Configuration status="debug"> 
    <Properties> 
    <Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property> 
    </Properties> 
    ... 
    <Appenders> 
    <Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}"> 
    .... 
</Configuration 

하지만, 실패 할 경우,이 속성에 다시 떨어질 것이다 : 즉,이 형태를 취한다 log4j2.xml 구성 파일의 맨 위에있는 Properties 섹션에 정의되어 있습니다.

<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}"> 

는 일반적으로 모든 Log4j2 조회가이 패턴을 따르십시오 : ${type:key:-defaultValue}

인라인

두 번째 방법은 기본 값 인라인을 제공하는 것입니다. 그런데

SYS 대

봉투는 env 접두사 (Windows의 % 경로 %와 같은) 환경 변수이며, Java 시스템 등록 정보 인 sys 관련이 없습니다. 참고 : http://logging.apache.org/log4j/2.x/manual/lookups.html

+0

:

같은 예제를 사용합니다. 감사. –

+0

이전 버전에서 작동했는지는 모르겠지만 더 이상 작동하지 않습니다. 기본 값을 정의하려면 속성에서 ': -'를 사용해야합니다. – GoGoris

12

동일한 ${sys:propName:-default} 구문을 사용할 수 있습니다. ': -'에 주목하십시오. "가변 기본값 구분 기호"입니다. 은 " 구분 변수 기본값"에 대한 기본 값은 bash는 및 기타 * nix에서 스크립트 껍질 같이 :-입니다.

StrSubstitutor 클래스에 대한 Log4j 2 설명서에서 이에 대해 자세히 읽을 수 있습니다.그것은 정확히 설명 작품

<Configuration status="debug"> 
    ... 
    <Appenders> 
     <Appender type="File" name="File" 
        fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}"> 
     .... 
    </Appenders> 
</Configuration> 
+0

이것은 나를 위해 완벽하게 작동했습니다. – chaitanya

+0

아쉽게도 log4j2.xml 파일이로드 될 때 기본값이 확인되는 것 같습니다. 예를 들어 기본값을 설정하지 않습니다. 스레드 컨텍스트를 통해 주입되는 변수. – rec

+1

수정 : 작동하지만 두 번째 '$'를 추가해야합니다 (예 : '$$ {ctx : username : -UNKNOWN}':) – rec