在log4j配置中覆盖子类别的级别

时间:2009-01-29 14:12:45

标签: java log4j auditing

我的申请中有一些审核。每个审计事件都有自己的log4j类别,其名称以相同的字符串为前缀。

EG: 一般审计类别名称:com.company.audit

web登录类别名称:com.company.audit.web.login
创建一些东西:com.company.audit.api.create 等。

默认情况下应记录某些类别,但有些类别不是=>

<category name="com.compamy.audit" additivity="true">
    <priority value="INFO"/>
</category>

<category name="com.company.audit.web.login" additivity="true">
  <priority value="DEBUG">
</category>

默认情况下,不应记录INFO第二类。至少我认为它但它不起作用。有关如何覆盖“子类别”的日志记录级别的任何帮助。

注意:我没有太多可能改变整个命名方案

增加:

这是appender的配置:

<appender class="org.apache.log4j.RollingFileAppender" name="Company_AUDIT">

<param name="File" value="${jboss.server.log.dir}/company_audit.log"/>

<param value="10000KB" name="MaxFileSize"/>

<param value="10" name="MaxBackupIndex"/>

<layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="foo"/>
</layout>

</appender>

1 个答案:

答案 0 :(得分:1)

您的配置意味着:对于类别com.company.audit,请记录级别INFO或更高级别的所有邮件。对于com.company.audit.web.login,请记录级别DEBUG或更高级别的所有邮件。因此,记录了第二类的所有消息,这就是您要求的内容。

您真正想要的是选择是否显示第二个类别。我可以想到两种方法:

  1. 在您的代码中,使用约定com.company.audit中的所有邮件都将记录在INFO级别,com.company.audit.web.login中的所有邮件都将记录在{{1}级}}。在您的配置中,您只需要设置主类别的级别:

    • DEBUG:显示所有消息
    • DEBUG:不显示“可选”消息(即子类别的消息)
  2. 在配置中,如果要禁用其消息,请将INFO置于级别com.company.audit.web.login。如果要激活它,只需注释该行(它将从主类别继承配置)。

  3. 我更喜欢第二个选项,因为您可以继续使用消息重力级别(最初的含义)。