2011-05-26 42 views
1

這是我的情況:我有一個庫項目,目的是覆蓋log4net和集中日誌與自定義appender。我有這些類:我的自定義日誌管理器問題

myCustomLogManager 
CustomLog 
ICustomLog 

在myCustomLogManager,我得到這個:

public class myCustomLogManager 
{  
    public static ICustomLog GetLogger(System.Type t) 
    { 
     return new CustomLog(t); 
    } 
    // Other stuff 
} 

我的自定義日誌:

class CustomLog : ICustomLog 
{ 
    private static ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

    public CustomLog(System.Type t) 
    { 
     log = LogManager.GetLogger(t); 
    } 

    public void Debug(string message, Exception e) 
    { 
     log.Debug(message, e); 
    } 
} 

進入我的控制檯應用程序項目,在每個班級,我宣佈:

private static readonly ICustomLog logger = myCustomLogManager.GetLogger(typeof(myClass)); 

當我登錄myClass,沒問題。但是,如果我使用另一個類,我也登錄(讓我們說myOtherClass),我將來登錄myClass的記錄器名稱將具有值「myOtherClass」。爲了說明問題,這裏是輸出的一個例子:

  • [信息] myProject.myClass:「從myClass的日誌」
  • [信息] myProject.myOtherClass:「來自myOtherClass的日誌!」
  • [信息] myProject.myOtherClass:「myClass !!的第二個日誌」

這是非常難以解釋,我希望我足夠清楚的,但事實是默認的記錄器,在myOtherClass類做的東西后myProject.myOtherClass,不回來myProject.myClass當我登錄在myClass類中。

我該如何解決這個問題?

感謝您的閱讀和你的幫助:-)

回答

0

充分利用logCustomLog非靜態:

private ILog log; 

(也沒有必要將其初始化爲任何東西)

由於具有靜態字段您基本上只有一個記錄器,因此當您使用日誌管理器爲第二個類獲取「新」記錄器時,它會發生變化。

+0

嗨Stefan, 非常感謝它的工作。 雖然這很漂亮,但是當我在調試時,我正在監視存儲庫log4net中的記錄器,並且還有我所有的記錄器。也許這就是爲什麼我沒有想到這個靜態日誌。 再次感謝! – Xavier 2011-05-26 11:09:55