2

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

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

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

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

4

1 回答 1

2

两个建议供您尝试:

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}

于 2012-04-10T10:34:49.543 回答