.net Diagnostics最佳实践?

mam*_*amu 16 .net system.diagnostics

我们最初没有使用任何日志记录或调试跟踪,但在花了几周时间追踪一些数据损坏后,我们决定将生成所需的Debug.Write和Trace以及Debug.Assert

那么现在问题是使用调试和跟踪日志记录的最佳实践是什么.我只是在寻找一些通用的东西.

public void AddRectodatabase(object record)
{
   Debug.WriteLine(record.ToString());
   Trace.WriteLine(record.ToString());

   // Add it to databse

   Debug.Assert(true, "Use this on case by case basis");
}
Run Code Online (Sandbox Code Playgroud)

这对于一般用途是否足够好,我在那里做错了吗?

我们希望坚持.net System.Diagnostics而不是像log4net这样的其他选择.

System.Diagnostics中还有其他有用的东西吗?

Ric*_*ner 13

您应该计划在整个应用程序中引发ETW跟踪事件 - 不仅是为了提醒听众问题,还要提供对应用程序和组件性能的行为甚至性能的可见性.

ETW是一种(疯狂的)高性能和(惊人)低影响的方式,可以收集和分析可以收集和分析的事件 - 即使在生产环境中也是如此.它是Windows,SQL等中使用的日志记录和跟踪基础结构.

三个有用的链接:

  1. 诊断:在.NET 3.5中使用ETW跟踪(EventProviderTraceListener)
  2. 控制.NET Framework日志记录链接文本
  3. 两分钟练习:XPerf简介

按顺序阅读全部3然后重新阅读 - 以后的信息将非常有用,但除非您首先掌握基础知识,否则将难以理解;)忽略使用logman启动和停止跟踪集合的说明; 请改用XPerf.

如果您还没有看过Perf工具包和XPerf查看器,那么您可以享受一下!:d

强烈建议您考虑在所有应用程序最重要的功能的开头和结尾处提升启动和停止事件,以便您可以使用其他遥测功能覆盖这些事件,以便您可以看到,例如,您的应用功能的影响在磁盘,网络,内存,CPU等

希望这可以帮助.


wag*_*ghe 5

这种反应迟了,但......

我认为你应该考虑使用TraceSources而不是Debug.WriteLine和/或Trace.WriteLine.使用TraceSources,您可以实现对日志记录的更高级别控制.可以像TraceSource(TraceListener)的目标一样控制每个TraceSource的级别.你可以写这样的代码:

public class RectToSqlServer : IDatabaseUtilities
{
  private static readonly TraceSource ts = new TraceSource("RectToSqlServer");

  public void AddRectToDatabase(object record)
  {
    ts.TraceEvent(TraceEventType.Information, "record = {0}", record.ToString());

    //Add record to database ...

  }
}

public class RectToOracle : IDatabaseUtilities
{
  private static readonly TraceSource ts = new TraceSource("RectToOracleServer");

  public void AddRectToDatabase(object record)
  {
    ts.TraceEvent(TraceEventType.Information, "record = {0}", record.ToString());

    //Add record to database ...

  }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以独立控制每个类的日志记录(级别,目标等).另请注意,您不必同时添加Trace.WriteLine和Debug.WriteLine来获取调试和发布版本中的日志记录.使用TraceSources将使您在将来使用ETW处于有利位置,因为从.NET开始可以使用ETWTraceListener(可能是3.5,当然是4.0).但这种特殊的ETW功能仅适用于Vista及更高版本的操作系统.

要向System.Diagnostics添加功能(主要 - 可能只是 - 如果通过TraceSource记录),请查看Ukadc.Diagnostics.Ukadc.Diagnostics为System.Diagnostics添加了非常酷的格式化功能(类似于您可以使用log4net和NLog执行的功能).没有代码依赖(只需安装Ukadc.Diagnostics并在app.config中添加一些配置).我不得不说我认为这很酷.

如果你想做一些工作来包装对TraceSources的访问,请参阅这里有关TraceSource包装器的一个有趣的实现,它实质上为TraceSources提供了"继承"来自"祖先"TraceSources的日志记录配置的能力(就像log4net和NLog记录器一样)可以继承日志记录设置).