11

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

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

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

我能想到几种可能:

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

2 回答 2

7

我问过自己同样的问题,但我没有在任何 Microsoft 文档中找到任何可以澄清这一点的内容。我设法找到的是 Microsoft MVP Richard Grimes 撰写的一篇文章: “id 参数是您选择的任何参数,没有强制要求特定 ID 与特定格式的消息相关联。” 在所有示例中,他使用 0 作为 id 参数。

在 MSDN 文章中,我看到它是随机使用的,没有提供任何附加信息。我相信,只要您保持相同的代码约定,您就可以在阅读日志时以任何最能帮助您的方式使用它。如果您想使用SourceFilter.ShouldTrace方法,它也可能在跟踪过滤中被证明是有用的,它也接受一个 id 参数。

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

于 2013-08-13T13:55:48.473 回答
4

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

就我个人而言,当我使用TraceSource(诚然不多,最近才发现它)时,我用它来跟踪事件类型或类别。在一个应用程序中,我已经有一个事件类型的枚举,我正在使用另一种日志记录方法,其值为 Debug、Info、Warn、Error、Fatal,因此我将其转换为int并将其用作id,这有助于稍后进行过滤所以我可以过滤掉任何低于我感兴趣的水平的东西,以消除跟踪的混乱。

另一种可能性是您可以使用不同的值来关联应用程序的不同部分,因此 Data Access = 1、User Accounts = 2、Product Logic = 3、Notifications = 4、UI = 5 等。同样,您可以使用它将跟踪过滤到仅您正在查看的事物类型。

或者,您可以(如您所建议的)使用不同的id值来表示不同的事件类型,因此您可以像错误代码一样使用它们,这样(例如)任何时候您看到id26 时,您都会知道数据库连接不可能成立,或其他。

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

  • 它对您构建和调试程序很有用
  • 通读您的代码的程序员清晰易懂
  • 它在整个程序中始终如一地使用

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

于 2013-08-13T14:08:49.733 回答