문제

LOG4J XML 구성 파일에서 시스템 환경 변수 (Java 시스템 속성과 반대로)를 참조 할 수 있습니까?

나는 다음과 같은 일을 할 수 있기를 원합니다.

<level value="${env.LOG_LEVEL}" />

시스템 환경 변수에서 얻을 수 있으므로 -D 매개 변수로 많은 것을 전달하지 않아도됩니다.

도움이 되었습니까?

해결책

이 구문은 log4j 2.x에만 문서화되어 있으므로 올바른 버전을 사용하고 있는지 확인하십시오. 1.x 버전에서는 작동하지 않습니다.

    <Appenders>
    <File name="file" fileName="${env:LOG_PATH}">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
        </PatternLayout>
    </File>
</Appenders>

다른 팁

나는 최근에 그렇게하려고 노력했고 그것을 작동시킬 수 없었습니다. 내가 한 일은 시작시 변수를 보내는 것입니다. 따라서 $ log_level이라는 환경 변수가 있다고 가정합니다.

<level value="${log_level}" />

그리고 스타트 업에서 ...

java -Dlog_level=$LOG_LEVEL your_app

나는 이것이 뒷받침되지 않는다고 생각하지만 기본적으로 환경 변수를 가져 오기 위해 두 가지 작업을 수행 할 수 있습니다.

  1. log4j가 구성되기 전에 System.setProperty를 사용하십시오

  2. (귀하의) 환경 변수를 런처의 시스템 속성으로 변환

첫 번째 옵션은 기본적으로 다음과 같습니다.

for (Map<String,String>.Entry entry : System.getenv().entrySet()) {
  System.setProperty(entry.getKey(), entry.getValue());
}

... 그러나 질문은 물론이 코드를 어디에 두어야하는지입니다. 특히 Tomcat 컨테이너 또는 이와 유사한 종류의 실행중인 경우 문제가 발생할 수 있습니다.

다른 하나는 주로 환경에 달려 있습니다. 기본적으로 앱을 시작하는 쉘 스크립트가있는 경우 모든 환경 변수를 속성으로 설정하거나 필요한 것과 예를 들어 쉘 매직을 작성할 수 있습니다.

java -DMY_ENV=$MY_ENV -DMY_OTHER_ENV=$MY_OTHER_ENV -cp ... com.example.Main

Catalina.sh 또는 이와 유사한이를 지원하기 위해 서버 시작 스크립트를 변경할 수도 있습니다.

이와 같이 대장을 대장과 변수의 이름 사이에 넣어야합니다.

<level value="${env:LOG_LEVEL}" />

시스템 변수를 만듭니다. 그러한 변수에 setenv.bat를 사용하는 것이 좋습니다.

@echo off
rem app specific log dir
set "APP_LOG_ROOTDIR=../app/app-log"
exit /b 0

log4j.xml 파일에 참조를 추가하십시오

<appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
  <param name="Threshold" value="DEBUG" />
  <param name="MaxFileSize" value="512KB" />
  <param name="MaxBackupIndex" value="10" />
  <param name="File" value="${APP_LOG_ROOTDIR}/app.log"/>
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%d %-5p %c{1} %m %n" />
  </layout>
</appender>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top