2011-02-01 35 views

回答

9

看到這些答案的一個很好的起點等問題,使用TraceSources上:

can't understand .net 2010 tracing and app.config

How to use TraceSource across classes

我要說的是,任何時候你有一個以上的類,你可能(可能)考慮有多個TraceSource。

一個優點於具有多個TraceSource是,它增加了在這你可以控制你的日誌的粒度。例如,如果您在每個課程中使用不同的TraceSource,則可以將日誌記錄控制到課程級別。你可以打開一個(或多個)特定的類並關閉所有其他類。

這是NLog和log4net用戶的常見模式。使用這些登錄平臺類典型的初始化將是這個樣子:

public class A 
{ 
    //NLog example 
    private static Logger logger = LogManager.GetCurrentClassLogger(); 

    public F() 
    { 
    logger.Info("Inside F"); 
    } 
} 

在這個例子中,A類記錄器被命名爲類的完全限定域名(NLOG確實在GetCurrentClassLogger的辛勤工作() )。

做TraceSource類似的東西,你會做這樣的事情:

public class A 
{ 
    private static TraceSource ts = new TraceSource(System.Reflection.GetCurrentMethod().DeclaringType.ToString(); 

    public F() 
    { 
    ts.Information("Inside F"); 
    } 
} 

如果你在每一個類這樣做,你可以很容易地控制你的類記錄。

我不敢肯定這種模式爲常見的有TraceSource因爲它與log4net的和NLOG。我認爲您可能會經常看到TraceSource的用戶按功能區域獲取他們的TraceSources。

所以,你可能將您的應用程序成「讀」,「過程」和「寫」功能(或任何有意義的你)。在這種情況下,你可以得到基於功能區的類別相應的TraceSource它們被用於:

public class FileReader 
{ 
    private static TraceSource ts = new TraceSource("Read"); 

    public F() 
    { 
    ts.Information("Hello from FileReader.F"); 
    } 
} 

public class NetworkReader 
{ 
    private static TraceSource ts = new TraceSource("Read"); 

    public F() 
    { 
    ts.Information("Hello from NetworkReader.F"); 
    } 
} 

等。

現在,你可以把日誌記錄爲「讀取」,並關閉所有其他職能部門(或打開詳細日誌記錄爲「讀取」,對於所有其他不太詳細的日誌記錄)。

此外,一個與TraceListeners選項是輸出TraceSource名稱。因此,在輸出中,您可以更輕鬆地理解日誌記錄,因爲如果您願意,可以相對輕鬆地找到從特定功能區域(或特定TraceSource)生成的所有日誌記錄消息。

如果你有一個很好的命名空間命名約定,你甚至可以考慮基於命名空間層次結構中的某個節點或甚至基於該類所在的程序集來獲取每個類的TraceSource。類型將爲您檢索該信息。

既然你正在尋找TraceSources,我會鼓勵你看看這個項目在CodePlex上:

http://ukadcdiagnostics.codeplex.com/

這是一個很好的項目(基於TraceSource),它允許您格式化的日誌輸出與使用log4net和NLog所做的相似。

我也鼓勵你看看圍繞着Castle的TraceSource構建的這個日誌記錄封裝器。

https://github.com/castleproject/Castle.Core/blob/master/src/Castle.Core/Core/Logging/TraceLogger.cs

有趣的事情,他們所做的是提供一個層次結構TraceSource的名稱。過去我已經實現了類似的東西。它工作得很好。

我對這個問題的答案提供了TraceSource層次如何是有益的想法:

What's the best approach to logging?

祝你好運!

相關問題