【问题标题】:EventLog WriteEntry() argumentException error with .net 4.5.net 4.5 的 EventLog WriteEntry() argumentException 错误
【发布时间】:2014-01-08 13:08:43
【问题描述】:

由于我已将代码迁移到 .net 4.5,当我尝试使用 eventID > 65535 编写 eventLog 时出现错误

这是我的代码,其中 iID > 65535:

 System.Diagnostics.EventLog appLog = new System.Diagnostics.EventLog();
 appLog.Source = "my source";
 appLog.WriteEntry(sMsg, EventLogEntryType.Error, iID);

根据定义,eventID 是一个 int32,所以我不明白为什么会出现错误。

这里是堆栈跟踪:

   at System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
   at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID)
   at WSeProcFilesHandler.EventLog_AddEntry(String sMsg, Int32 iID) in d:\Liox\TFS\Eprocurement\Main\Dev\Eprocurement\Services\WAeProcFilesHandler\WSeProcFilesHandler.cs:line 567

欢迎任何帮助。 谢谢

【问题讨论】:

    标签: c# .net event-log argumentexception


    【解决方案1】:

    嗯,这在msdn中有说明

    ArgumentException

    • 或 - eventID 小于零或大于 UInt16.MaxValue。

    说实话,没有解释为什么 Int32 参数仅限于 UInt16...

    管理此问题的一种方法是使用事件日志类别(请参阅此overload)。因此,每个类别可能有 65536 个 id。

    顺便说一句,这是很多不同的事件日志 ID,不是吗?

    【讨论】:

    • 这是我看到的,但和你一样,我不明白为什么它仅限于 UInt16.MaxValue。有没有办法增加这个尺寸?
    • 我将使用一个固定的 eventID 并将 iID 移动到 sMsg 字符串中。感谢您的帮助
    • @Denfer06 是的,eventID 应该类似于“事件类型”,而不是一种自动递增的数字。
    • 您好,谢谢,是的,我遵循了有关创建服务的教程,并且有一个名为 GetEventId() 的方法,该方法正在递增。这也让我很着迷(很奇怪,因为这是一个 x64 应用程序?!)。无论如何,正如你所说,大量不同的 ID,我可以为每个调用以将更新写入日志的模块分配一个 ID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    相关资源
    最近更新 更多