首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >.net诊断最佳实践?

.net诊断最佳实践?
EN

Stack Overflow用户
提问于 2010-05-09 03:19:22
回答 3查看 6.4K关注 0票数 16

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

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

代码语言:javascript
复制
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");
}

这对于一般用途来说足够好了吗,我做错了什么吗?

我们希望继续使用.net System.Diagnostics,而不是log4net等其他替代方案。

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

EN

回答 3

Stack Overflow用户

发布于 2010-10-03 22:59:22

这个回应很晚,但是..。

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

代码语言:javascript
复制
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 ...

  }
}

现在,您可以独立地控制每个类的日志记录(级别、目标等)。此外,请注意,您不必同时添加Trace.WriteLine和Debug.WriteLine才能在调试和发布版本中获得日志记录。使用TraceSources将使您在将来使用ETW时处于有利地位,因为从.NET (可能是3.5版本,肯定是4.0版本)开始就有了可用的ETWTraceListener。但这种特殊的ETW功能只在Vista和更高版本的操作系统上可用。

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

如果您想花点功夫来包装对TraceSources的访问,请参阅here,了解一个有趣的TraceSource包装器实现,它实质上使TraceSources能够从“祖先”TraceSources“继承”日志记录配置(就像log4net和NLog记录器如何继承日志记录设置一样)。

票数 5
EN

Stack Overflow用户

发布于 2010-05-09 03:29:23

除了将第一个参数硬编码为trueAssert之外,您可以很好地使用它。您可能应该在那里添加一些条件,只有当条件为false时,才会打印消息(第二个参数)。因此,在您的代码示例中,它将永远不会显示。在某些情况下,如果您不想将调试语句包装在条件块中,WriteLineIf可能会派上用场。

查看Debug class reference,它有很多有用的方法和属性来帮助您记录日志。

票数 0
EN

Stack Overflow用户

发布于 2010-05-26 07:59:30

System.Diagnostics也包含EventLog.WriteEntry,但您可能想要也可能不想用跟踪消息淹没EventLog,尽管这是记录主要应用程序事件的一种简单方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2795310

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档