gpt4 book ai didi

log4j - 如何用另一个 log4j2 配置文件覆盖一个 log4j2 配置文件?

转载 作者:行者123 更新时间:2023-12-02 03:02:49 26 4
gpt4 key购买 nike

我当前的 Web 应用程序使用 log4j 1.2,我想迁移到 log4j2,但我无法弄清楚如何处理我的特定用例。

在我的网络应用程序的 war 文件中,我存储了一个具有合理默认值的 log4j 配置文件。我的设计是搜索 war 文件外部的配置文件,该文件将覆盖与 war 捆绑的配置。这样,日志记录配置是在部署时配置的,并且对于每个服务器可以不同。

使用 log4j 1.2,这是通过 ServletContextListener 使用以下方法完成的,效果很好:

/**
* Configures system-wide log4j logging system with log4j.xml from the
* class path. This overrides configuration from the default location in
* Tomcat: WEB-INF/classes
*/
private void configureLog4J() {
URL url = ClassLoader.getSystemResource("log4j.xml");
if (url != null) {
DOMConfigurator.configure(url);
log = org.apache.log4j.LogManager.getLogger(LDSContextListener.class);
log.info("log4j.xml loaded from " + url);
}
}

如果我要迁移到 log4j2,如何使用外部文件的配置覆盖内部文件? log4j2 的 API 中没有 DOMConfigurator

最佳答案

我找到了一个解决方案,它并不完全复制我以前的解决方案,但足够接近。

我没有以编程方式配置 log4j,而是将 log4j-web-2.0.jar 添加到我的类路径中,并将以下内容添加到我的 web.xml 中:

<context-param>
<param-name>isLog4jAutoInitializationDisabled</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>file:///usr/jboss/ldsconf/log4j2.xml</param-value>
</context-param>

<listener>
<listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
</listener>

<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
<dispatcher>ASYNC</dispatcher><!-- Servlet 3.0 w/ disabled auto-initialization only; not supported in 2.5 -->
</filter-mapping>

其中 log4jConfiguration context-param 指定我的外部配置文件所在的位置。这与类加载器在类路径中搜索配置文件不同,但它仍然允许我引用外部配置文件。另外,如果该文件不存在,系统将回退到内部配置文件,这正是我想要的。

引用:http://logging.apache.org/log4j/2.x/manual/webapp.html

关于log4j - 如何用另一个 log4j2 配置文件覆盖一个 log4j2 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25294611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com