Spring 在执行时设置log4j文件路径参数

Spring 在执行时设置log4j文件路径参数,spring,log4j,Spring,Log4j,在春季,我使用带有log4j的slf4j来解决日志记录问题 我将相对路径放在log4j.xml配置中,但当我在Netbeans Tomcat和独立Apache Tomcat中执行应用程序时,相对路径是不同的,我必须手动更改 我的想法是从Spring控制器获取上下文realpath,并在执行时将其设置在log4j配置中。但是我不知道 如何从Spring Controller更改log4j的文件路径参数?两个建议供您尝试: 向web.xml添加-这将配置指向web应用程序根的系统属性(默认为weba

在春季,我使用带有log4j的slf4j来解决日志记录问题

我将相对路径放在log4j.xml配置中,但当我在Netbeans Tomcat和独立Apache Tomcat中执行应用程序时,相对路径是不同的,我必须手动更改

我的想法是从Spring控制器获取上下文realpath,并在执行时将其设置在log4j配置中。但是我不知道


如何从Spring Controller更改log4j的文件路径参数?

两个建议供您尝试:

向web.xml添加-这将配置指向web应用程序根的系统属性(默认为
webapp.root
,但您可以使用上下文参数进行自定义-请参阅Javadocs链接),然后在log4j.properties/xml文件中使用:

<listener>
    <listener-class>org.springframework.web.util.WebAppRootListener<listener-class>
<listener>

<!-- log4.appender.File=${webapp.root}/logs/web-app.log -->

org.springframework.web.util.webapprotListener
或者在您的web.xml中使用(最终委托给a)-这与上述类似,但允许您定义自定义log4j配置文件,还允许您的web应用程序监视log4j配置文件,以了解运行时所做的更改,并自动更新日志记录器:

<context-param>
    <!-- Configure Log4J from the following config file location -->
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
</context-param>

<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener<listener-class>
<listener>

log4jConfigLocation
/WEB-INF/log4j.xml
org.springframework.web.util.Log4jConfigListener
我还建议您详细阅读上面的Javadocs——在Tomcat中部署多个webapp和共享系统属性方面存在一些问题,但这一切都可以解决(为每个webapp提供自定义密钥,而不是默认的
${webapp.root}