【问题标题】:Add category with different logging levels to different appenders in log4j将具有不同日志记录级别的类别添加到 log4j 中的不同附加程序
【发布时间】:2012-06-24 12:38:00
【问题描述】:

我想以某种方式记录配置该日志类别“x”的记录器

  • 记录器 1 在 INFO 级别记录“x”,在 DEBUG 级别记录其他内容
  • 在 DEBUG 级别记录两个日志“x”

我见过使用阈值在不同附加程序中为同一类别实现不同日志记录级别的示例。在这种情况下,它似乎不是一个有效的解决方案,因为在两个附加程序中,我希望至少有一个 DEBUG 级别的类别。

我尝试过类似的操作:

<appender name="FILE_ONE" class="org.jboss.logging.appender.DailyRollingFileAppender">
...
</appender>
<appender name="FILE_TWO" class="org.jboss.logging.appender.DailyRollingFileAppender">
...
</appender>

<category name="y">
    <priority value="DEBUG"/>
    <appender-ref ref="FILE_ONE"/>
</category>
<category name="x">
    <priority value="INFO"/>
    <appender-ref ref="FILE_ONE"/>
</category>
<category name="x">
    <priority value="DEBUG"/>
    <appender-ref ref="FILE_TWO"/>
</category>

但第二类声明会覆盖第一个。

这甚至可以做到吗?

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    试试这个。在appender标签下设置优先级param name="Threshold"

    <appender name="FILE_ONE" class="org.jboss.logging.appender.DailyRollingFileAppender">
     <param name="Threshold" value="INFO"/>
    
    ...
    </appender>
    <appender name="FILE_TWO" class="org.jboss.logging.appender.DailyRollingFileAppender">
     <param name="Threshold" value="DEBUG"/>
    ...
    </appender>
    

    【讨论】:

    • 这只会将 INFO 级别的日志放在 FILE_ONE 中。我想获得来自“x”的信息级别日志和来自“y”的调试级别日志
    • 看看here,你可以在运行时在java代码中设置它,甚至在类级别。这将是使用不同路径实现目标的替代方法。
    • 不能更改代码。实际上在代码中配置记录器似乎并不正确。
    【解决方案2】:

    this solution 类似,您可以使用自己的过滤器来完成工作。此过滤器应允许给定的 specialCategory 记录在 specialCategoryLevel 级别,其他类别在 generalLevel 级别。

    <appender name="FILE_ONE" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <filter class="your.own.Filter">
          <param name="specialCategory" value="x" />
          <param name="specialCategoryLevel" value="DEBUG" />
          <param name="generalLevel" value="INFO" />
      </filter>
    ...
    </appender>
    <appender name="FILE_TWO" class="org.jboss.logging.appender.DailyRollingFileAppender">
      <param name="Threshold" value="DEBUG"/>
    ...
    </appender>
    
    <category name="y">
        <appender-ref ref="FILE_ONE"/>
    </category>
    <category name="x">
        <appender-ref ref="FILE_ONE"/>
        <appender-ref ref="FILE_TWO"/>
    </category>
    

    【讨论】:

      【解决方案3】:

      对我们来说是这样的:

          <appender name="RAF_TIP_CommissionEnrich_v01_CC" class="org.apache.log4j.DailyRollingFileAppender">
                  <param name="File" value="/opt/sag/99/IntegrationServer/instances/prodap2a/logs/TIP_CommissionEnrich_v01_CC_Trace.log"/>
                  <param name="DatePattern" value="'.'yyyyMMdd"/>
                  <layout class="org.apache.log4j.PatternLayout">
                          <param name="ConversionPattern" value="%d %-5p - %m%n"/>
                  </layout>
          </appender>
                <category name="TIP_CommissionEnrich_v01_CC">
                <priority value="INFO"/>
          <appender-ref ref="RAF_TIP_CommissionEnrich_v01_CC"/>
          </category>
          <!-- root element - leave it on the bottom of file -->
          <appender name="applicationLog" class="org.apache.log4j.DailyRollingFileAppender">
                  <param name="File" value="/opt/sag/99/IntegrationServer/instances/prodap2a/logs/application.log"/>
                  <param name="DatePattern" value="'.'yyyyMMdd"/>
                  <layout class="org.apache.log4j.PatternLayout">
                          <param name="ConversionPattern" value="%d %-5p - %m%n"/>
                  </layout>
          </appender>
          <root>
                  <level value="ERROR"/>
                  <appender-ref ref="applicationLog"/>
          </root>
      

      那么你有 TIP_CommissionEnrich_v01_CC 的所有错误 + 信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-09
        • 1970-01-01
        • 2014-02-06
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多