在我的应用程序中,我使用EventLog(因为我正在处理钱,所以我需要记录所有可能发生的事件)。 EventLog工作得很好,但问题是,我的消息来得太快了(1秒内我可以得到3-5个事件)。
在那些消息之后,我无法在EventLog中正确排序它们(我需要按时间排序)。
问题是:如果1s发生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类型
-int eventID
- 短期类别
-byte [] rawData
但没有什么会存储的时间。 有没有办法如何用毫秒精度在基本的Windows EventLog中编写?
答案 0 :(得分:1)
为什么不能使用第三方库?你有没有与任何被禁止使用非微软'图书馆,假设是限制。拥有这样的全面限制是愚蠢的。
您无法简单地获得任何其他时间戳,但您可以尝试一些黑客攻击。显而易见的是采用毫秒精度部分(未记录在日志中)并将其用作EventID
- 它是特定于应用程序的部分,因此您可以按照自己喜欢的方式使用它。如果你每秒只有几个事件,那么对事件日期/时间进行排序应该没问题,你可以直观地确定事件的顺序。
如果它太多,那么您可以将事件日志导出到Excel或其他内容并按两列排序。
显然,您也可以对源进行过滤,以减少箔条。
您可能也希望查看Windows high speed logging: ETW in C#/.NET using System.Diagnostics.Tracing.EventSource ,这可能有所帮助,但如果您只是要登录EventLog,则不会。
基本上,如果您的要求是毫秒精度,那么您不应该使用Windows事件日志,因为它没有提供。正如已经指出的那样,有许多日志解决方案可以满足您的需求。
答案 1 :(得分:0)
鉴于记录时间戳的是事件日志,看起来你看起来不会达到毫秒精度。
使用像log4net之类的东西写一个标准的基于文本的日志会不会更好? log4net写入的日志确实具有毫秒级的精度以及许多其他内容,例如写入条目的类的标识。如果/当你需要扩大规模时,它可能会更快。