简体   繁体   中英

Add category with different logging levels to different appenders in log4j

I would like to have to file loggers configured that log category 'x' in a way that

  • logger one logs 'x' on INFO level and other stuff at DEBUG level
  • logger two logs 'x' on DEBUG level

I've seen examples that use Threshold to achieve different logging levels for the same category in different appenders. In this case it does not seem to be a valid solution as in both appenders i would like to have at least one category at DEBUG level.

I've tried to do something like:

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

but second category declaration overrides the first one.

Is this even possible to do that?

Try this.. Set the priority under appender tag by 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>

Similarly to this solution you can use an own Filter to do he job. This Filter should allow a given specialCategory to log at level specialCategoryLevel, other categories at level 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>

For us works something like that:

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

Then you have all errors + info for TIP_CommissionEnrich_v01_CC

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM