Servlet使用不同log4j2- {env:envValue} .xml的示例

时间:2014-07-24 18:46:05

标签: servlets config log4j2 servletcontextlistener

根据此主题“根据环境定义不同的log4j2.xml配置”中的答案,从log4j用户列表中我尝试使用不同的配置测试不同的环境。我尝试发布到该列表,但它似乎没有接受电子邮件问题,所以发布在这里

这就是我所做的。

  • 我已经定义了一个Windows env变量websphere_environment并将其值设置为“local”

  • 我的web.xml context-param如下所示 - 我的servlet版本是3.0

    <context-param>
        <param-name>log4jConfiguration</param-name>
        <param-value>/WEB-INF/config/log4j2-${env:websphere_environment}.xml
        </param-value>
    </context-param>
    
  • 我的相关servlet方法如下所示

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
        ServletException, IOException {
    
        Logger logger = Logger.getLogger(ServletLog4j2Test.class.getName());
        logger.fatal("Loaded:);
        //    " + /WEB-INF/config/log4j2-${env:websphere_environment}.xml
    }
    
  • 我没有在WEB-INF / config中定义的lo4j2-local.xml(它被定义为log4j-local.xml,而不是log4j2-local.xml,并且期望得到错误,但它似乎servlet正在使用默认配置,因为当我运行servlet时,我得到了

    "07/24/14 07:14:07:564:FATAL:WebContainer : 0:        :     :com.test.log4j2.ServletLog4j2Test: Loaded:"
    
  • 我应该如何设置我的网络应用和配置文件,以便根据环境为不同的环境使用不同的配置?

  • 在这种情况下,我应该定义一个ServletContextListener来加载相应的文件吗?

  • 在这种情况下,我的另一个问题是 - 什么时候调用ServletContextListener?如果在ServletContextListener中定义,设置是否会应用于Web应用程序中的所有内容?

谢谢

2 个答案:

答案 0 :(得分:0)

log4j2手册configuration page描述了log4j2将查找的配置文件以及位置。如果找不到配置文件,它将激活一个默认配置,将错误级别事件记录到控制台。

找不到配置文件的原因是文件名log4j2-${env:websphere_environment}.xml中的变量。

您可以在配置文件本身中使用此类变量,但在指定配置文件的路径时则不能。

答案 1 :(得分:0)

我在Rem4上使用了Log4j2错误列表,这个问题已经通过Remko和Matt的帮助解决了。以下是 details

我必须确保在项目中添加log4j2-web-x.jar文件,并且还需要确保我没有在类路径中添加log4j2-web-x-sources.jar。