如何在tomcat中为Web应用程序配置外部文件夹中的log4j.properties

时间:2012-12-30 06:17:10

标签: java java-ee tomcat classpath tomcat5.5

请帮助您了解如何处理以下情况。

当前的网络应用 我已将log4j.propertes放在webapp的/WEB-INF/classes文件夹中。

想要实现: <子> 将log4j.properties放在外部位置并从我的Web应用程序中引用,以便我可以随时修改日志位置,而无需重新构建战争。

$CATALINA_HOME/propdirwebapp1/log4j.properties $CATALINA_HOME/propdirwebapp2/log4j.properties

如果我部署了多个应用程序,请提出解决方案建议。如果服务器上只部署了一个应用程序,请建议解决方案

4 个答案:

答案 0 :(得分:6)

就我在web.xml中的情况而言,我添加了Log4jConfigListener并且它有效。 log4jRefreshInterval在这里是可选的。

<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>file:/<your-path-here>/log4j.properties</param-value>
</context-param>
<context-param>
    <param-name>log4jRefreshInterval</param-name>
    <!-- Refresh log4j configuration every 5 minutes. -->
    <param-value>300000</param-value>
</context-param>

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

答案 1 :(得分:0)

无需重建war文件,而只需直接修改log4j.properties并重新启动tomcat。

答案 2 :(得分:0)

您可以将目录添加到$ CATALINA_BASE / conf / catalina.properties中的shared.loader属性。

shared.loader=conf/myapp/

然后将log4j.properties放在此目录中。

但有两个限制因素。

1)如果WEBINF/classes中有一个log4j.properties文件,那么首先会加载一个

2)此目录由所有webapp共享,因此所有webapps只能有一个log4j.properties文件。

答案 3 :(得分:0)

我喜欢我的尝试,它只处理不同战争应用程序的日志级别。

在conf中放置自定义属性文件,例如

$CATALINA_BASE/conf/my.properties

创建

等条目
myapp.loglevel = INFO
myapp2.loglevel = DEBUG

根据请求阅读道具,例如

myProps = new Properties();
myProps.load(new FileInputStream(new File(System.getProperty("catalina.base"), "conf/my.properties")));

在请求开头的servlet中读取并使用该属性,例如

String myLoglevel = (String)myProps.get("myapp.loglevel");
LogManager.getRootLogger().setLevel(Level.toLevel(myLoglevel));

我们正在使用slf4j-log4j12并且我已经读过log4j2中没有LogManager,但我确信这种机制也可以应用于log4j2。