我有一个带有log4j2的(4.0)。这个webapp不使用web.xml,通过Java负责配置。Log4j2配置需要在外部配置文件中进行,而不是在类路径.上进行。
在与web.xml的前一次化身中,我们有
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///path/to/log4j2.xml</param-value>
</context-param> 而且这起作用了。
在新的web.xml-less世界中,我尝试了这样的方法:
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应用程序中用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>当然,一定有更好的办法!
发布于 2015-07-02 18:06:49
我相信您可以像这样在运行时将log4j2重新配置为一个新的配置文件。
LoggerContext context = (LoggerContext)LogManager.getContext(false);
context.setConfigLocation(URI.create("path to file"));
context.reconfigure();可以将这个添加到您的onStartup中。
发布于 2016-05-23 07:04:59
这可能为时已晚,但您可以执行以下操作,将log4j2配置设置为外部路径:
public class ApplicationInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext)
throws ServletException {
servletContext.setInitParameter(Log4jWebSupport.LOG4J_CONFIG_LOCATION, "file:///path/to/log4j2.xml");发布于 2015-07-02 18:49:25
我还没有对其进行测试,但以下几项应该值得一试;将onStartup(…)方法中的Log4jConfigurer调用替换为以下Log4jConfigurer调用:
Log4jConfigurer.initLogging("file:///path/to/log4j2.xml")这基本上就是在log4jConfigLocation文件的<context-param>中使用web.xml文件时所发生的事情(通过Log4jWebConfigurer,参见代码)。
我只想知道这是否也适用于log4j2,尽管我也不希望<context-param>的方法能够使用它。当您仍然使用log4j2文件时,您也使用了web.xml吗?
https://stackoverflow.com/questions/31169581
复制相似问题