自定义应用程序在登录到 Windows EventLog 时是否应使用任何有效事件 ID 范围?或者我可以使用我选择的任何事件 ID (1,2,3,4....)。PS,我正在使用 C#.NET 进行开发。
5 回答
EventIds 是特定于应用程序的,因此您可以使用您喜欢的任何范围。只需确保您记录了您使用过的内容和位置,这样您就可以确保您不会使用 id 两次,或者便于调试。
但请记住...
就像亨利福特所说的“你可以有任何你想要的颜色,只要它是黑色的”——你也可以使用你喜欢的任何范围,只要该范围在 0 和 65535 的范围内。
果然,由作者来定义和跟踪他们使用的事件 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);