파워노트

spring legacy project 에서 log4j2.xml 을 profile로 관리 할때 본문

spring legacy

spring legacy project 에서 log4j2.xml 을 profile로 관리 할때

파워킴 2022. 3. 4. 19:41
반응형

* spring 에서 logging 시스템은 중요한 부분을 차지 한다.

* 경우에 따라서는 운영환경별로 분리 하기도 하고 외부 경로의 설정값을 이용하기도 한다.

 


# log4j2.xml 의 profile별 관리 

나의 경우 테스트 환경과 운영 서버 환경의 logfile 저장 경로가 달라 profile 별로 설정을 고려 해야 했다
예를 들면
- 나의 로컬 개발 환경은 로그 저장경로가 /svc/powernote,
- 운영 서버의 로그 저장경로는 /home/opc/logs
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
    <Properties>
        <SystemPropertyArbiter propertyName="spring.profiles.active" propertyValue="bhkim">
            <Property name="logPath">/svc/powernote</Property> 
        </SystemPropertyArbiter>
        <SystemPropertyArbiter propertyName="spring.profiles.active" propertyValue="prod">
            <Property name="logPath">/home/svc/logs</Property> 
        </SystemPropertyArbiter>
        <Property name="layoutPattern">
                %style{%d{yyyy/MM/dd HH:mm:ss,SSS}}{cyan} %highlight{[%-5p]}{FATAL=bg_red, ERROR=red,
                INFO=green, DEBUG=blue} [%C{1.}] %style{[%t]}{yellow}- %m%n
        </Property>
    </Properties>
    <Appenders>
         <File name="file" fileName="${logPath}/sample.log" append="false">
            <PatternLayout pattern="${layoutPattern}" />
         </File>
    </Appenders>
 ...
 </Configuration>

- SystemPropertyArbiter 를 통해 설정 할 수 있다.

- propertyName 는 properties 의 Key 값 이다. 

- propertyValue 는 properties 의 값에 해당한다. 

 


# log4j2-xxx.xml 의  별도 관리 파일 ( 파일명 변경 및 위치 변경 )

서버 운영 환경에서의 별도로 로그를 꾸준히 설정을 변경하고 관리가 필요하여 외부 파일을 설정하는경우가 있다.
이때 유용할 듯 하다.
-Dlog4j.configurationFile 옵션 셜정을 통해 해결.

 

* 톰캣 실행시 catalina.sh 파일에 해당 옵션을 주어 실행하면  해당 로그파일을 설정할 수 있다.

JAVA_OPTS="$JAVA_OPTS -Dlog4j.configurationFile=/home/svc/config/log4j2-prod.xml"

 

 


# 참고적으로 ~~ 

 

web.xml 에 아래와 같은 설정은 log4j2 에서는 통하지 않는것을  알고 있으며 테스트 시에도 동작 하지 않는다.

<context-param>
   <param-name>log4jConfigLocation</param-name>
   <param-value>classpath:log4j-${spring.profiles.active}.xml</param-value>
</context-param>
<listener>
   <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

또한 spring 4.2.1 에서는 log4j 1.x가 EOL 로   Deprecated Class로 관리 되고 있다.

 

그거므로 되도록이면 log4j2 를 사용하고  경로 설정및 파일명 변경에 대해서는  catalina, 또는 java 실행 옵션으로 지정하는것이 좋을것 같다.

Java 실행변수 -Dlog4j.configuration를 통한 log4j2.xml 위치 변경이 가능 합니다.
또는 catarina 옵션 설정으로 set CATALINA_OPTS=-Dlog4j.configuration=log4j.xml 가능 합니다.
[참고 ] : https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&qaId=QA_00000000000013124

 

반응형
Comments