【问题标题】:Log4j Grouping application logsLog4j 对应用程序日志进行分组
【发布时间】:2010-03-09 00:18:34
【问题描述】:

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

例如我有 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 等等。但我想不出将这些日志分组的方法。

【问题讨论】:

    标签: jboss log4j


    【解决方案1】:

    非常感谢大家的回复。

    我已经通过阅读 log4j for jboss 的一些文档来修复它。

    我所要做的就是为每个应用程序组指定一个附加程序,并且在每个附加程序内部,我都会有一个过滤器链。

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

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

    【讨论】:

      【解决方案2】:

      定义一个您将用于这三个日志的附加程序:

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

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

      【讨论】:

      • 我认为关键是他想根据生成日志条目的应用程序来选择附加程序,而不是它使用的记录器名称。这就是 TCLFilter 的用途,但它并不总是有效。
      • 你是对的,但也许他可以使用他的包作为解决方法。如果他只想路由他的应用程序的日志,它将起作用。如果他想将他的所有类别日志路由到一个文件中,显然这是行不通的。
      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 2017-06-26
      • 2016-09-28
      • 1970-01-01
      • 2012-05-18
      • 2012-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多