2010-03-09 51 views
1

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

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

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

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

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

我试过使用TCLFilter,但是我只能成功地将单个应用程序记录到各个日志文件中。如在,A1.esb记录到A1.log,A2.esb记录到A2.log等等。但我无法弄清楚分组这些记录的方法。

回答

0

定义您将使用这三个日志一个appender:

<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> 

然后路线的包这个记录器与相加=假

<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> 

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

+0

我认为关键是他想根据应用程序生成的日志条目来选择appender,而不是使用哪个记录器名称。这就是'TCLFilter'的作用,但它并不总是奏效。 – skaffman 2010-03-09 16:04:31

+0

你是对的,但也许他可以使用他的软件包作为解决方法。如果他只想路由他的应用程序的日志,它将起作用。显然,如果他想将所有类别日志路由到一个文件中,它将不起作用。 – 2010-03-09 16:06:52

2

非常感谢你们的回复。

我设法通过阅读关于log4j的一些关于jboss的文档来解决它。

我只需要为每个应用程序组指定一个appender,并在每个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。