2012-04-10 71 views
1

在春天我与log4j的SLF4J解决日志记录。设置log4j的文件路径PARAM

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

我的想法是从春天控制器获得真实路径的上下文和执行时间,将其设置为log4j的配置。但我不知道......

我怎样才能改变log4j的文件路径PARAM从春季控制器?

回答

2

两个建议你去尝试:

添加WebAppRootListener到你的web.xml - 这将配置系统属性指向(默认为webapp.root,但你可以自定义使用的context-param - 请参阅Javadoc链接)到您的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 conf IGU文件,也允许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> 

我也建议你详细阅读的Javadoc以上 - 有一些关于在Tomcat中部署多个webapps以及共享系统属性的疑问,但这可以全部解决(为每个webapp提供一个自定义密钥,而不是默认的${webapp.root}

+0

Nice Chris,工作正常!谢谢! :) – Dani 2012-04-11 07:21:48