동일 컨테이너상 서로다른 webapp에 선언된 webAppRootKey로 인한 문제해결

Jakarta 2010. 3. 23. 11:37
동일 작업대상을 협업으로 개발할때 log4j설정중 로그파일 위치는 각 개발자간 서로다른 경로상에 위치하게 된다.

최초 정의이후 거의 변화가 없는것이 log4j 설정파일 이지만
전사적으로 사용되는 framework이나 공통모듈에 이식된 log4j의 경우 이를 사용하는 개발자의 환경세팅시에
매번 변경을 해줘야 하는 번거로움이 존재한다.

웹 base개발인 경우 본인은 이 문제를 해결하기 위해
web.xml의 context-param 을 통해서 각 개발자간 상이한 환경에서도 동적으로 webroot경로를
얻기 위해 다음과 같이 정의하여 사용한다.
web.xml
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>webapp.root</param-value>
    </context-param>

log4j.xml
    <appender name="DAILY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd" />
        <param name="file" value="${webapp.root}/WEB-INF/logs/epms.log" />
        <param name="append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%t> [%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n"/>
        </layout>
    </appender>
 단일 컨테이너(WAS)상에 위의 형태를 사용하는 web app가 한개인 경우는 아무런 문제 없이 작동한다.
하지만 두 개 이상의 web app가 구동되면 여지없이 기동시에 에러를 발생시킨다.

이유인즉 context-param에 선언되는 webAppRootKey name의 경우
system property의 key로 설정된다는것이다.

즉, System.getProperty("webapp.root") 이렇게 사용될 수 있다는것이다.
그러므로 서로다른 webapp내에 context-param이라 할지라도

system property로 활용되기에 중복된 key값을 사용할 수 없으므로 나타나는 에러인것이다.
어쩔수 없이 context-param의 value는 유니크한 값으로 선언할 수 밖에 없을것 같다.
다음과 같이 말이다. ㅡㅡ

webapp1
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>first.webapp.root</param-value>
    </context-param>

    <appender name="DAILY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd" />
        <param name="file" value="${first.webapp.root}/WEB-INF/logs/epms.log" />
        <param name="append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%t> [%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n"/>
        </layout>
    </appender>

webapp2
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>second.webapp.root</param-value>
    </context-param>

    <appender name="DAILY" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="datePattern" value="'.'yyyy-MM-dd" />
        <param name="file" value="${second.webapp.root}/WEB-INF/logs/epms.log" />
        <param name="append" value="true" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%t> [%d{yyyy-MM-dd HH:mm:ss}] [%c{1}] [%L] [%p] %m %n"/>
        </layout>
    </appender>
테스트

설정

트랙백

댓글