簡體   English   中英

如何在tomcat中的Web應用程序的外部文件夾中配置log4j.properties

[英]How to configure log4j.properties in external folder for a web application in tomcat

請幫助如何處理以下情況。

當前的Web應用程序: 我已將log4j.propertes放置在webapp的/WEB-INF/classes文件夾中。

想要實現: 將log4j.properties放置在外部位置並從我的Web應用程序引用,這樣我就可以在需要時隨時修改日志位置,而無需重建戰爭。

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

如果我部署了多個應用程序,請提出解決方案。 如果服務器上僅部署了一個應用程序,請提出解決方案

就我在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>

無需重建war文件,只需直接修改log4j.properties並重新啟動tomcat。

您可以在$ CATALINA_BASE / conf / catalina.properties中的shared.loader屬性中添加目錄。

shared.loader=conf/myapp/

然后將log4j.properties放在此目錄中。

但是有兩個約束。

1)如果WEBINF/classes中有一個log4j.properties文件, WEBINF/classes首先加載該文件

2)該目錄被所有Web應用共享,因此所有Web應用只能有一個log4j.properties文件。

我喜歡我的嘗試,它只處理不同戰爭應用程序的日志級別。

例如,將自定義屬性文件放入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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM