在 Spring 中,我使用 slf4j 和 log4j 来解决日志记录。
我将相对路径放在log4j.xml配置中,但是当我在Netbeans Tomcat和独立的Apache Tomcat中执行应用程序时,相对路径不同,我必须手动更改。
我的想法是从 Spring Controller 获取上下文 realpath 并在执行时将其设置在 log4j 配置中。但我不知道...
如何从 Spring Controller 更改 log4j 的文件路径参数?
两个建议供您尝试:
将WebAppRootListener添加到您的 web.xml - 这将配置系统属性指向(默认webapp.root
为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 应用程序和共享系统属性有一些问题,但这都可以解决(为每个 web 应用程序提供自定义密钥,而不是默认${webapp.root}