Log4j:每次战争一个日志文件

时间:2011-03-01 15:47:20

标签: logging log4j classloader war

是否可以根据war文件设置单个日志文件?我们有两个应用程序“战争”,每个战争都与特定功能相关,并由不同的团队管理。我们希望在自己的日志文件中输出单个war的日志。请注意,这两种战争都使用了一些通用代码,因此我们可以在包级别进行扩展。任何意见都表示赞赏。

谢谢

3 个答案:

答案 0 :(得分:3)

如果您在JBoss中部署应用程序,则可以为<filter>中声明的<appender>设置jboss-log4j.xmlexample 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>    

答案 1 :(得分:1)

使用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文件都有自己的日志文件。

答案 2 :(得分:0)

这是适用于JBoss的log4j solution。如果战争使用不同的类加载器,它应该适用于其他容器。

HTH