2

我想尝试在我的 Web 应用程序中使用 logj 2。使用 log4j 1.x,我们根据环境设置不同的配置文件,并使用 ServletContextListener 使用类似的调用加载适当的配置

DOMConfigurator.configureAndWatch(logConfigFile, delay);

通过传递配置文件位置。

我正计划对 log4j2 配置文件做同样的事情,但根据thisthis,将 DOMConfigurator 与 log4j2 一起使用是不可能或不可取的。

所以,我的问题是:如何根据环境使用不同的配置文件和 log4j 2?

4

4 回答 4

1

你想通过拥有多个配置文件来实现什么?我猜测您希望为每个 Web 应用程序拥有单独的日志文件。

实现此目的的一种方法是使用 RoutingAppender;这可以根据 ThreadContextMap 中设置的键/值将日志事件委托给其他附加程序。有些人使用他们的网络应用程序名称作为打开的值。

Beta-9(GA 之前的最后一个 Beta)即将发布,它将有更好的文档用于将 log4j2 与 Web 应用程序一起使用(FAQ 将有一个详细的 RoutingAppender 示例)。

这回答了你的问题了吗?

于 2013-09-08T22:22:46.200 回答
0

感谢 Remko Popma,我发布了这个问题并从 log4j 用户邮件列表中得到了答案。可以使用带有“log4jconfiguration”上下文参数的系统属性或环境变量在运行时动态设置配置文件

于 2013-09-12T09:25:23.187 回答
0

如果您在 Servlet 3.x 容器中,我建议您按照 Log4j2 的建议,将 log4j-web jar 添加到其他正在使用的 jar 中,并按照web 应用程序的 log4j2使用手册中的说明设置上下文参数。

于 2018-02-06T19:12:01.683 回答
0

答案中的邮件列表链接已损坏。虽然目前可以在此处访问。要获得完整答案,您可以在上下文参数中使用系统属性,如下所示:

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>file:/${sys:MYLOGDIR}/log4j2.xml</param-value>
</context-param>

This one was really hard to find as it is only mentioned in the mailing list.

于 2021-10-03T02:11:15.027 回答