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

时间:2012-04-10 09:55:58

标签: spring log4j

在Spring中,我有slf4j和log4j来解决日志记录。

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

我的想法是从Spring Controller获取上下文实现路径,并在执行时将其设置为log4j配置。但我不知道......

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

1 个答案:

答案 0 :(得分:2)

您可以尝试两种建议:

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

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

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

或者使用web.xml中的Log4jConfigListener(最终委托给Log4jConfigurer) - 这与上面类似,但允许您定义自定义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>

我还建议您详细阅读上面的Javadocs - 在Tomcat中部署多个Web应用程序和共享系统属性有一些问题,但这些都可以解决(为每个webapp提供自定义密钥) ,而不是默认的${webapp.root}