我什么时候需要在代码中使用多个TraceSource?

如果一个应用程序将其所有活动数据写入一个日志文件,那么是否有使用多个TraceSource的用处? 我只是对代码中需要多个TraceSource的用例感到好奇。


查看这些其他问题的答案,以获取使用TraceSources的良好起点:

无法理解.net 2010跟踪和app.config

如何跨类使用TraceSource

我会说,只要您有多个班级,您可能会考虑拥有多个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。有.NET调用将检索那些信息适合你。

由于您正在查看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层次结构如何有益的想法:

什么是记录最好的方法?

祝你好运!

链接地址: http://www.djcxy.com/p/52387.html

上一篇: When do I need more than one TraceSource in code?

下一篇: How to use TraceSource across classes