根据此主题“根据环境定义不同的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应用程序中的所有内容?
谢谢
答案 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。