gpt4 book ai didi

java - 如何在 spring 的 xmls 中定义变量以在 log4j.properties 中使用

转载 作者:IT老高 更新时间:2023-10-28 13:54:05 24 4
gpt4 key购买 nike

这里有点谜。

我在 WAR 中有一个应用程序。里面有web.xml和application context.xml,还有log4j.properties。此 WAR 在 tomcat 中运行。

有可能在 log4j.properties 中使用一些变量,例如log4j.appender.file.File=${catalina.base}/logs/app.log

我想在 web.xml 或 context.xml 中定义一个变量并在 log4j.properties 中使用它。例如,以某种方式设置 version=1.1 并使用 log4j.appender.file.File=${catalina.base}/logs/app-${version}.log。它不应该是环境变量。

我可以不重新编译应用程序吗?

添加应该不会影响任何事情,但以防万一......

它的 web.xml 看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">

<!-- Spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:context.xml</param-value>
</context-param>

<!-- log4j -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>10000</param-value>
</context-param>
<context-param>
<param-name>log4jExposeWebAppRoot</param-name>
<param-value>false</param-value>
</context-param>
...
</web-app>

最佳答案

创建一个 org.springframework.web.util.Log4jConfigListener 的子类,将 version 值公开为 System 变量(当然您可以通过标准 System/Java 环境变量)。

public class TestListener extends Log4jConfigListener{

@Override
public void contextInitialized(ServletContextEvent pEvent) {
String value = pEvent.getServletContext().getInitParameter("version");
String version = System.getProperty("version");
if (version == null || version.trim().length()==0) System.setProperty("version", value);

super.contextInitialized(pEvent);
}
}

并修复您的 web.xml

 <?xml version="1.0" encoding="UTF-8"?>
<web-app 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_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">

<!-- Spring -->
...
<!-- log4j -->
<listener>
<listener-class>com.TestListener</listener-class>
</listener>
<context-param>
<param-name>version</param-name>
<param-value>1.1</param-value>
</context-param>
...

关于java - 如何在 spring 的 xmls 中定义变量以在 log4j.properties 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31666937/

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