這是可以在每個戰爭文件基礎上設置單獨的日誌文件嗎?我們有兩個應用程序「戰爭」,每個都與特定功能有關,由不同的團隊管理。我們想要在其自己的日誌文件中輸出單個戰爭的日誌。請注意,這兩場戰爭都使用一些通用代碼,因此我們可以在套餐層面進行詳細說明。任何輸入讚賞。Log4j:每場戰爭一個日誌文件
謝謝
這是可以在每個戰爭文件基礎上設置單獨的日誌文件嗎?我們有兩個應用程序「戰爭」,每個都與特定功能有關,由不同的團隊管理。我們想要在其自己的日誌文件中輸出單個戰爭的日誌。請注意,這兩場戰爭都使用一些通用代碼,因此我們可以在套餐層面進行詳細說明。任何輸入讚賞。Log4j:每場戰爭一個日誌文件
謝謝
這裏是一個log4j solution,對JBoss的工作。它應該適用於其他容器,前提是戰爭使用不同的類裝載機。
HTH
如果你在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>
隨着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文件都有自己的日誌文件。
我認爲就足夠了,TCLFilter只查找子字符串。如果你有一個「版本化」的戰爭app1-x.y.z.war,或者如果你使用人工名稱app1:war從IDE部署,這可能會有所幫助。 – 2014-12-23 21:22:11