关于c#:我应该用TraceSource.TraceEvent方法中的id参数识别什么?

What should I identify with the id argument in TraceSource.TraceEvent method?

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

然而,我一直不清楚的一点是,TraceEvent方法中id参数的意图是什么。当前,我总是将其设置为0。

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

我可以想到几种可能性:

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

我曾经问过自己同样的问题,但在任何Microsoft文档中都没有发现任何可以澄清的问题。
我设法找到的是Microsoft MVP Richard Grimes写的一篇文章:
" id参数是您选择要使用的任何参数,不会强迫特定的ID与特定的格式消息相关联。"
在所有示例中,他都将0用作id参数。

在MSDN文章中,我已经看到它是随机使用的,没有提供任何其他信息。
我相信,只要您保持相同的代码约定,就可以以任何有助于您阅读日志的最佳方式使用。如果想使用SourceFilter.ShouldTrace方法,该方法在以后的跟踪过滤中也很有用,该方法也接受id参数。

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


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

就我个人而言,当我使用TraceSource时(我发现它不是很多,只是最近才发现的),我使用它来跟踪事件类型或类别。在一个应用程序中,我已经有一个事件类型的枚举,该事件类型与另一种日志记录方法一起使用,其值为Debug,Info,Warn,Error,Fatal,因此我将其强制转换为int并将其用作id,稍后帮助进行过滤,因此我可以过滤出我感兴趣的水平以下的任何东西,以使跟踪变得杂乱无章。

另一种可能性是,您可以使用不同的值来关联应用程序的不同部分,因此数据访问= 1,用户帐户= 2,产品逻辑= 3,通知= 4,UI = 5等。同样,您可以然后使用此过滤器将跟踪信息筛选为仅查找您正在查看的事物的类型。

或者,您可以(如建议的那样)使用不同的id值来表示不同的事件类型,因此您可以将它们用作错误代码,以便(例如)每次看到id为26时,您\\知道无法建立数据库连接,等等。

使用id参数的用途并不重要,只要:

  • 这对您构建和调试程序很有用
  • 程序员阅读您的代码很清楚并且可以理解
  • 在整个程序中始终使用

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