我的自定义事件日志条目使用什么事件ID?

时间:2009-11-18 12:21:35

标签: c# windows event-log

自定义应用程序在登录Windows EventLog时是否应该使用任何有效事件ID范围?或者我可以使用我选择的任何事件ID(1,2,3,4 ......)。 P.S,我在C#.NET中开发。

5 个答案:

答案 0 :(得分:25)

EventIds是特定于应用程序的,因此您可以使用您喜欢的任何范围。只需确保记录您使用的内容以及在哪里,以确保您不会使用id两次,或者为了便于调试。

但请记住......

就像亨利·福特所说的那样“只要它是黑色的你可以拥有任何你想要的颜色” - 你也可以使用你喜欢的任何范围,只要该范围在0到65535的范围内。

答案 1 :(得分:6)

果然,作者需要定义和跟踪他们使用的事件ID及其含义。

这是一个参考:http://msdn.microsoft.com/en-us/library/e29k5ebc.aspx - 特别有趣的是关于不将具有IPv6地址的消息(因为字符)写入事件日志的部分。我打赌你可以用一个参数解决这个问题。

答案 2 :(得分:2)

ID的hi位保留用于测试,调试和用于开发的其他标志。可用位是:

0x0000 - 0xffff

请参阅:Event Message Structure

应避免使用高位,但如果创建自定义源,则可以使用底部位的所有值。如果您使用系统或预先存在的源,您将发生冲突并可能收到错误的消息。消息来自已注册的源消息DLL文件。可以使用SDK中的消息文件编译器构建自定义消息文件。

答案 3 :(得分:0)

Edit1:我对此进行了测试,并且eventID为32位并不正确。它只有16位。

eventId是Int32,从-2,147,483,648到2,147,483,647

EventLog.WriteEntry方法(String,String,EventLogEntryType,Int32)

public static void WriteEntry(
    string source,
    string message,
    EventLogEntryType type,
    int eventID
)

答案 4 :(得分:0)

  

从技术上讲,您可以使用 1 - 65536 之间的任何值。

但是,如果你是那些像我一样编写大量详细日志的人,你会发现很难将一堆条目联系在一起然后我建议每次代码执行时生成一个随机的唯一值,你可以识别事件,甚至更好的想法是创建自己的日志&使用它而不是在应用程序日志中写入所有内容的源代码。 像

 Random rnd = new Random();
 EventId = rnd.Next(0, 65535);