Log4j分组应用程序日志

时间:2010-03-09 00:18:35

标签: jboss log4j

我正在尝试将多个相关应用程序的日志分组到一个日志文件中。

例如,我有3个应用程序A1.esb,A2.esb,A3.esb。

我希望这3个应用程序中的所有日志都记录到名为A.log的单个日志文件中。

同样,我想要B.logb,B2.esb和B3.esb的B.log。

我在JBoss应用服务器中使用log4j。

我曾尝试使用TCLFilter,但我只是成功地将各个应用程序记录到单个日志文件中。如在,A1.esb记录到A1.log,A2.esb记录到A2.log,依此类推。但我无法想出一种对这些记录进行分组的方法。

2 个答案:

答案 0 :(得分:2)

非常感谢你的回复。

我已经设法通过阅读有关jboss的log4j的一些文档来修复它。

我所要做的就是为每个应用程序组指定一个appender,在每个appender中,我会有一个过滤器链。

所以我的日志追加器应如下所示。

<appender name="A" 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/A.log"/>
<param name="Threshold" value="INFO"/>

<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}] %m%n"/>
</layout>

<filter class="org.jboss.logging.filter.TCLFilter">
<param name="AcceptOnMatch" value="true"/>
<param name="DeployURL" value="A1.esb"/>
</filter>

<filter class="org.jboss.logging.filter.TCLFilter">
<param name="AcceptOnMatch" value="true"/>
<param name="DeployURL" value="A2.esb"/>
</filter>

<filter class="org.jboss.logging.filter.TCLFilter">
<param name="AcceptOnMatch" value="true"/>
<param name="DeployURL" value="A3.esb"/>
</filter>

<filter class="org.apache.log4j.varia.DenyAllFilter"/>

</appender>
对于B组来说是

等等,它有B1.esb,B2.esb和B3.esb。

答案 1 :(得分:0)

定义一个用于这三个日志的追加器:

<appender name="A" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
      <param name="File" value="${jboss.server.log.dir}/A.log"/>
      <param name="Append" value="true"/>
    <param name="Threshold" value="INFO"/>

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
      </layout>
   </appender>

然后使用additivity = false

将包路由到此记录器
   <category name="A1.esb" additivity="false">
   <priority value="INFO"/>
      <appender-ref ref="A"/>
   </category>

   <category name="A2.esb" additivity="false">
   <priority value="INFO"/>
      <appender-ref ref="A"/>
   </category>   

   <category name="A3.esb" additivity="false">
   <priority value="INFO"/>
      <appender-ref ref="A"/>
   </category>

我希望您为每个应用程序使用不同的包。