我应该在TraceSource.TraceEvent方法中使用id参数识别什么?

时间:2013-07-11 09:59:35

标签: c# .net system.diagnostics

我使用TraceSource类来登录我的.NET项目。

然而,我从来不清楚的一点是,TraceEvent方法中id参数的意图是什么。目前,我总是把它设置为0。

但它的预期或典型有用用途是什么?

我可以想到几个可能性:

  • 它是事件发生的ID(即同一行代码在每次执行时产生不同的ID);
  • 它是方法调用的ID(即,您可以从ID推断出代码行);
  • 它是一系列类似事件的ID(例如,表示数据库不存在的所有错误消息共享相同的ID);
  • 它是与逻辑操作相关的一组事件的ID,并结合TraceEventType.(Start|Stop|Suspend|Resume|Transfer)枚举值;

2 个答案:

答案 0 :(得分:6)

我问自己同样的问题,我在任何Microsoft文档中都没有找到任何澄清这一点的内容。 我找到的是一篇由微软MVP撰写的文章,Richard Grimes: "The id parameter is whatever you choose it to be, there is no compulsion that a particular ID is associated with a particular format message." 在所有例子中,他使用0作为id参数。

在MSDN文章中,我看到它使用随机,没有提供任何其他信息。 我相信只要您保持相同的代码约定,您就可以在阅读日志时以任何方式使用它们。如果你想使用接受id参数的SourceFilter.ShouldTrace方法,那么之后在跟踪过滤中它可能会很有用。

我用它来描述错误类型,如果我有错误,或者使用0表示其他任何内容。

答案 1 :(得分:4)

据我在文档中看到,它并非专门用于一个目的。我认为你可以使用自己的逻辑跟踪事件。 ShouldTrace()上的SourceFilter方法采用匹配的id参数,因此您也可以使用它来确定哪些事件或事件类型可以去哪里。

就个人而言,当我使用TraceSource(事实上并不多,最近才发现它)时,我会用它来跟踪事件类型或类别。在一个应用程序中,我已经使用了另一个日志记录方法的事件类型的枚举,其值为Debug,Info,Warn,Error,Fatal,因此我将其转换为int并将其用作{{1这有助于稍后过滤,所以我可以过滤掉我感兴趣的级别之下的任何东西,以消除痕迹。

另一种可能性是您可以使用不同的值来关联应用程序的不同部分,因此数据访问= 1,用户帐户= 2,产品逻辑= 3,通知= 4,UI = 5等。再次,您可以然后用它来过滤追踪到你正在看的东西的类型。

或者,你可以(如你的建议)使用不同的id值来表示不同的事件类型,因此您可以像错误代码一样使用它们,以便(例如)在您看到id时你知道无法建立数据库连接,或者其他什么。

使用id参数的内容并不特别重要,只要:

  • 对构建和调试程序非常有用
  • 阅读代码的程序员清楚易懂,
  • 在整个计划中始终如一地使用

一种可能性是,您可以拥有一个管理事件id的集中式类,并根据某种输入提供值,以确保整个应用程序使用相同的id同样的事情。