webAppRootKey
공통모듈에 이식된 log4j의 경우 사용하는 개발자의 환경세팅시에 매번 번거롭게 변경을 해줘야 한다. 웹 base개발인 경우 본인은 이 문제를 해결하기 위해 web.xml의 context-param 을 통해서 각 개발자간 상이한 환경에서도 동적으로 webroot경로를 얻기 위해 다음과 같이 정의하여 사용한다.
web.xml
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webapp.root</param-value>
</context-param>
단일 컨테이너(WAS)상에 위의 형태를 사용하는 web app가 한개인 경우는 아무런 문제 없이 작동한다. 하지만 두 개 이상의 web app가 구동되면 에러를 발생시킨다.
web.xml -> context-param에 선언되는 webAppRootKey name의 경우 system property의 key로 설정 된다.
즉, System.getProperty("webapp.root") 이렇게 사용될 수 있기 때문에 그러므로 서로다른 webapp내에 context-param이라 할지라도 system property로 활용되기에 중복된 key값을 사용할 수 없으므로 나타나는 에러이다.
위와 같은 경우 다음과 같이 유니크하게 선언하면 해결된다.
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>