2010-07-24 56 views
2

給定兩個附加目的地:A1,A2和多記錄儀,其中一個是L1如何設置每個附加器記錄特定水平log4net的

是否有可能配置log4net的這樣:

A1獲得DEBUG及以上從除 L1的所有記錄,爲它獲得INFO及以上
A2所有記錄儀

我已經看過添加器的閾值,過濾得到DEBUG及以上,和所有其他的配置組合,我能想到的,但沒有的他們似乎完成以上任務。

回答

1

你可以做到以下幾點:

  1. 定義你的兩個附加目的地(A1,A2)沒有任何過濾器
  2. 創建一個BufferingForwardingAppender,轉發到A1並過濾> = INFO
  3. 創建一個Buf feringForwardingAppender,即轉發到A2(沒有過濾器或> = DEBUG)
  4. 配置根記錄器使用追加程序A1,A2
  5. 配置L1記錄器不能承受附加目的地(加= FALSE);參考兩個BufferingForwardingAppender而不是

我沒有測試它,但我不明白爲什麼這不起作用。

+0

感謝Stefan,這個解決方案確實達到了預期的效果。我只需要一個額外的BufferingForwardingAppender,因爲記錄器L1可以直接引用A2。 – markee 2010-07-27 02:43:16

+0

是的,當然...我很傻,我沒有看到 – 2010-07-27 08:26:28

0

根據該文檔:

過濾器形成一個鏈,所述事件具有穿過。沿途的任何過濾器都可以接受事件並停止處理,否認事件並停止處理,或允許事件進入下一個過濾器。如果事件到達過濾器鏈的末尾而沒有被拒絕,它將被隱式接受並記錄下來。

如此看來,像這樣的工作(未經測試的僞代碼):

A1 
    Level >= INFO: Accept 
    Logger == L1: Deny 
    Level >= DEBUG: Accept 
    DenyAll 

A2 
    Level >= DEBUG: Accept 
+0

我試過這個,但是在A1結尾處的DenyAll過濾器阻止了任何東西被記錄。我刪除了DenyAll行,A1對所有其他記錄器進行了DEBUG操作,但從L1中完全沒有。我認爲記錄器L1的否認屬於「否認事件並停止處理」文檔聲明。話雖如此,即使它沒有解決這個問題,我很欣賞你的建議。 – markee 2010-07-27 02:40:42

相關問題