Tomcat: log4j – Cannot set web app root system property when WAR file is not expanded

Автор: | 18/06/2014

apache-tomcat-7-logoПри запуске Tomcat с установленным параметром unpackWARs="false" – приложение падает с ошибкой:

Jun 17, 2014 5:47:12 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Cannot set web app root system property when WAR file is not expanded

Как видно из ошибки – проблема вызвана Log4jConfigListener.

Для её решения – необходимо установить параметр:

<context-param>
  <param-name>log4jExposeWebAppRoot</param-name>
  <param-value>false</param-value>
</context-param>

в файл WEB-INF/web.xml проекта.

Подробнее можно посмотреть тут>>>.

В результате – настройки log4j в файле web.xml буду выглядеть так:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>file:/${LOG4J}</param-value>
  </context-param>
  <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>180000</param-value>
  </context-param>
  <context-param>
    <param-name>log4jExposeWebAppRoot</param-name>
    <param-value>false</param-value>
  </context-param>

Где переменная ${LOG4J} указывает на файл настроек:

$ echo $LOG4J
/home/user/tomcat/conf/log4j.xml