2011-03-01 78 views
2

這是可以在每個戰爭文件基礎上設置單獨的日誌文件嗎?我們有兩個應用程序「戰爭」,每個都與特定功能有關,由不同的團隊管理。我們想要在其自己的日誌文件中輸出單個戰爭的日誌。請注意,這兩場戰爭都使用一些通用代碼,因此我們可以在套餐層面進行詳細說明。任何輸入讚賞。Log4j:每場戰爭一個日誌文件

謝謝

回答

0

這裏是一個log4j solution,對JBoss的工作。它應該適用於其他容器,前提是戰爭使用不同的類裝載機。

HTH

2

如果你在JBoss中部署應用程序,您可以設置在jboss-log4j.xml宣佈<appender>一個<filter>。一個example from the JBoss Wiki

<appender name="App1Log" class="org.apache.log4j.FileAppender"> 
    <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"></errorHandler> 
    <param name="Append" value="false"/> 
    <param name="File" value="${jboss.server.home.dir}/log/app1.log"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
    <param name="ConversionPattern" value="%d %-5p %c{1} %m%n"/> 
    </layout> 
    <filter class="org.jboss.logging.filter.TCLFilter"> 
    <param name="AcceptOnMatch" value="true"/> 
    <!-- value="app1.war" is incorrect. --> 
    <param name="DeployURL" value="app1-exp.war"/> 
    </filter>  

+0

我認爲就足夠了,TCLFilter只查找子字符串。如果你有一個「版本化」的戰爭app1-x.y.z.war,或者如果你使用人工名稱app1:war從IDE部署,這可能會有所幫助。 – 2014-12-23 21:22:11

0

隨着log4j2(log4j的2.x版本)有一個名爲web:contextPath一個有用的查找,這可以用來指定日誌文件名,例如:

<RollingFile name="RollingFile" fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
    filePattern="${sys:catalina.base}/logs/$${date:yyyy-MM}/${web:contextPath}-%d{MM-dd-yyyy}-%i.log.gz"> 
    ... 
</RollingFile> 

所以每個war文件都有自己的日誌文件。