3

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

当前 Web 应用程序: 我已将 log4j.propertes 放在/WEB-INF/classeswebapp 的文件夹中。

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

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

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

4

4 回答 4

7

在我的情况下,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>
于 2013-10-30T15:25:08.247 回答
0

无需重建war文件,直接修改log4j.properties并重启tomcat即可。

于 2012-12-30T06:58:15.627 回答
0

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

shared.loader=conf/myapp/

然后把log4j.properties放到这个目录下。

但是有两个限制。

1)如果有一个 log4j.properties 文件WEBINF/classes将首先加载

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

于 2012-12-30T13:17:33.783 回答
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。

于 2018-04-19T13:30:54.313 回答