Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在log4j配置中覆盖子类别的级别_Java_Log4j_Auditing - Fatal编程技术网

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

Java 在log4j配置中覆盖子类别的级别,java,log4j,auditing,Java,Log4j,Auditing,我的应用程序中有一些审计。每个审核事件都有自己的log4j类别,其名称以相同的字符串作为前缀 例如: 一般审计类别名称:com.company.audit web登录类别名称:com.company.audit.web.login 创建一些东西:com.company.audit.api.create 等等 默认情况下,应记录某些类别,但有些类别不应=> <category name="com.compamy.audit" additivity="true"> <pri

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

例如: 一般审计类别名称: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>

默认情况下,不应记录第二类信息。至少我是这么想的,但没用。关于如何覆盖“子类别”上的日志记录级别的任何帮助

注意:我没有太多的可能性改变命名方案作为一个整体

增加:

以下是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>

您的配置意味着:对于类别
com.company.audit
,记录所有级别
INFO
或更高级别的消息。对于
com.company.audit.web.login
,记录所有级别
DEBUG
或更高级别的消息。因此,第二类的所有消息都会被记录下来,这是您要求的

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

  • 在代码中,使用约定,即
    com.company.audit
    中的所有消息将在
    INFO
    级别记录,而
    com.company.audit.web.login
    中的所有消息将在
    DEBUG
    级别记录。在配置中,您只需设置主类别的级别:

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


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

    第二个类别记录在什么级别?它是在INFO中记录的还是在DEBUG中记录的?问题可能在于你的appender配置。我后来意识到它记录了两次…我认为它应该完全按照你写的那样工作。但log4j似乎与两个类别都匹配a它对这两个类别都进行了日志记录=如果com.company.audit是信息,它会记录一次,然后还会记录为com.company.audit.web.login(如果未关闭)