У меня есть веб-приложение Spring MVC (4.0) с log4j2. Это веб-приложение не использует файл web.xml и обеспечивает настройку через Java Config. Конфигурация Log4j2 должна выполняться во внешнем файле конфигурации, а не в пути к классам.
В предыдущем воплощении с web.xml у нас было
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///path/to/log4j2.xml</param-value>
</context-param>
и это сработало.
В новом мире без web.xml я попробовал это:
public class WebappInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer
{
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
System.out.println("WebappInitializer.onStartup()");
servletContext.setAttribute("log4jConfiguration", "file:///path/to/log4j2.xml");
Это не работает. Кажется, это происходит слишком поздно и в любом случае не работает. Журналы показывают:
ERROR StatusLogger No Log4j context configuration provided. This is very unusual.
WebappInitializer.onStartup()
и ведение журнала log4j не происходит.
Каков правильный способ заменить это объявление параметра контекста на web.xml в приложении Spring MVC без web.xml?
ОБНОВЛЕНИЕ:
Я могу решить эту проблему, добавив следующий файл web.xml:
<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///path/to/log4j2.xml</param-value>
</context-param>
</web-app>
Конечно, должен быть лучший способ!