2009-01-29 69 views
0

在我的應用程序中有一些審計。每個審計事件都有自己的log4j類別,名稱前面加上相同的字符串。在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 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> 
+0

第二類記錄在什麼水平?它是否在INFO或DEBUG上登錄?這個問題可能與你的appender配置有關。 – Eddie 2009-01-29 22:37:12

+0

我後來意識到它記錄了兩次... – Juraj 2009-01-30 09:27:33

回答

1

你的配置是指:A類com.company.audit,記錄級別爲INFO或更高的所有消息。對於com.company.audit.web.login,請記錄級別爲DEBUG或更高的所有消息。因此,第二類的所有消息都被記錄下來,這就是你所要求的。

你真正想要的是選擇是否顯示第二類。我能想到的兩種方法做到這一點:

  1. 在你的代碼,使用,在com.company.audit的所有郵件將在INFO級別登錄該公約,並於com.company.audit.web.login的所有郵件將在DEBUG水平被記錄。在您的配置,你只需要設置的主要類別的級別:

    • DEBUG:顯示所有消息
    • INFO:不顯示「可選」的消息(即這些子類別)
  2. 在配置中,如果要禁用其消息,請將com.company.audit.web.login設置爲級別OFF。當你想激活它時,只需註釋該行(它將繼承主類別的配置)。

我更喜歡第二種選擇,因爲您可以繼續使用消息引力的等級(它最初的含義)。