1

在我的应用程序中,我使用 EventLog(因为我正在使用金钱,所以我需要记录所有可能发生的事件)。EventLog 工作得很好,但问题是,我的消息来得太快了(在 1 秒内我可以有大约 3-5 个事件)。
在这些消息之后,我无法在 EventLog 中对它们进行正确排序(我需要按时间对它们进行排序)。问题是:如果在 1 秒内发生 5 个事件,那么这 5 个事件在 EventLog 中“随机”排序,因为它只记录 YYYY/MM/DD hh/mm/ss,但我需要添加毫秒。有没有办法做到这一点?

我如何记录事件的基本代码:

    if (!EventLog.SourceExists(EventLogName))
        EventLog.CreateEventSource(ex.Message, EventLogName);
    EventLog log = new EventLog();
    log.Source = EventLogName;
    log.WriteEntry(ex.Message, EventLogEntryType.Error);

WriteEntry 中最精确的属性是:
-string source
-string message
-EventLogEntryType type
-int eventID
-short category -byte
[] rawData

但是没有任何东西可以存储时间。有没有办法以毫秒精度写入基本的 Windows EventLog?

4

2 回答 2

1

为什么不能使用 3rd 方库?假设这是限制,您是否与禁止使用“非微软”库的人讨论过这个问题。有这样一个全面的限制是愚蠢的。

您无法简单地获得任何其他时间戳,但您可以尝试一些技巧。显而易见的一个是采用毫秒精度部分(未记录在日志中)并将其用作EventID- 它是特定于应用程序的,因此您可以随意使用它。如果您每秒只有几个事件,那么按事件日志日期/时间排序应该没问题,您可以直观地确定事件的顺序。

如果它太多,那么您可以将事件日志导出到 Excel 或其他东西并按两列排序。

显然,您也可以过滤源,以减少谷壳。

您可能想查看Windows 高速日志记录:使用 System.Diagnostics.Tracing.EventSource 的 C#/.NET 中的 ETW,它可能会有所帮助,但如果您只想记录到 EventLog,则不会。

本质上,如果您的要求是毫秒精度,那么您不应该使用 Windows 事件日志,因为它不提供。正如已经指出的那样,有很多很多的日志记录解决方案可以满足您的需求。

于 2014-02-15T18:35:27.290 回答
0

鉴于记录时间戳的是事件日志,看起来您无法获得毫秒精度。

使用log4net之类的东西写入基于标准文本的日志不是更好吗?log4net 编写的日志确实具有毫秒精度以及许多其他内容,例如编写条目的类的身份。如果/当您需要扩大规模时,它也可能会更快。

于 2013-07-01T15:49:24.233 回答