javax.servlet.UnavailableException: In a Servlet 3.0+ application, you must not define a log4jServletFilter in web.xml. Log4j 2 defines this for you automatically.
Tomcat7に、古いWebアプリをデプロイしたら、log4jにまつわるエラーにより、WEBアプリが立ち上がらない問題に遭遇しました。
Tomcatのログを見ると、以下のようなエラーが出ていました。
SEVERE: Error during ServletContainerInitializer processing javax.servlet.UnavailableException: In a Servlet 3.0+ application, you must not define a log4jServletFilter in web.xml. Log4j 2 defines this for you automatically.
Servlet 3.0以降では、log4jServletFilterをweb.xmlの中に定義してはいけないそうです。
web.xmlから以下を削除しました。
<!-- log4j.xmlのファイルパス --> <context-param> <param-name>log4jConfiguration</param-name> <param-value>file:///PATH/TO/log4j2.xml</param-value> </context-param> <filter> <filter-name>log4jServletFilter</filter-name> <filter-class>org.apache.logging.log4j.core.web.Log4jServletFilter</filter-class> </filter> <filter-mapping> <filter-name>log4jServletFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> <dispatcher>INCLUDE</dispatcher> <dispatcher>ERROR</dispatcher> </filter-mapping> <!-- 起動・停止リスナー --> <listener> <listener-class>org.apache.logging.log4j.core.web.Log4jServletContextListener</listener-class> </listener>
そして、log4j2.xmlを、クラスパスが通ったディレクトリ、つまり、classファイル(Javaファイル)が配置されているディレクトリに移しました。