2011-02-01 85 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?

祝你好运!

相关问题