【发布时间】:2009-11-18 12:21:34
【问题描述】:
在记录到 Windows EventLog 时,自定义应用程序是否应使用任何有效事件 ID 范围?或者我可以使用我选择的任何事件 ID (1,2,3,4....)。 P.S,我正在使用 C#.NET 进行开发。
【问题讨论】:
在记录到 Windows EventLog 时,自定义应用程序是否应使用任何有效事件 ID 范围?或者我可以使用我选择的任何事件 ID (1,2,3,4....)。 P.S,我正在使用 C#.NET 进行开发。
【问题讨论】:
EventId 是特定于应用程序的,因此您可以使用任何您喜欢的范围。只需确保记录您使用过的内容和位置,这样您就可以确保不会两次使用 id,或者便于调试。
但请记住...
就像亨利福特所说的“你可以有任何你想要的颜色,只要它是黑色的”——你也可以使用你喜欢的任何范围,只要该范围在 0 和 65535 的范围内。
【讨论】:
ushort.MaxValue
果然,由作者来定义和跟踪他们使用的事件 ID 及其含义。
这是一个参考:http://msdn.microsoft.com/en-us/library/e29k5ebc.aspx - 特别有趣的是关于不将带有 IPv6 地址的消息(因为 % 字符)写入事件日志的部分。我打赌你可以使用一个参数来解决这个问题。
【讨论】:
ID 的高位保留用于测试、调试和其他用于开发的标志。可用位是:
0x0000 - 0xffff
应避免使用高位,但如果您创建自定义源,则低位的所有值都可用。如果您使用系统或预先存在的源,您将发生冲突并可能收到错误消息。消息取自已注册的源消息 DLL 文件。可以使用 SDK 中的消息文件编译器构建自定义消息文件。
【讨论】:
Edit1:我对此进行了测试,但 eventID 不是 32 位的。它只有 16 位。
eventId 为 Int32,从 -2,147,483,648 到 2,147,483,647
EventLog.WriteEntry Method (String, String, EventLogEntryType, Int32)
public static void WriteEntry(
string source,
string message,
EventLogEntryType type,
int eventID
)
【讨论】:
从技术上讲,您可以为此使用 1 - 65536 之间的任何值。
但是如果你像我一样写了大量冗长的日志,你会发现很难将一堆条目关联在一起,那么我建议每次执行代码时生成一个随机唯一值,你可以识别事件,甚至更好的主意是创建自己的日志和源来使用它,而不是在应用程序日志中写入所有内容。 喜欢
Random rnd = new Random();
EventId = rnd.Next(0, 65535);
【讨论】:
Application 日志时,每个模块。我正在运行一项每天消耗 6 万多条消息的服务,并且这些消息是在模块管道中处理的,因此随机 ID 帮助我识别它们并将它们组合在一起,因为 DateTime 总是相同的