繁体   English   中英

Windows EventLog,以毫秒精度写入日志

[英]Windows EventLog, write log with milliseconds precision

在我的应用程序中,我使用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中最精确的属性是:
-字符串源
字符串消息
-EventLogEntryType类型
-int eventID
-短类别
-byte [] rawData

但是没有什么地方可以存储时间。 有没有办法在毫秒级的基本Windows EventLog中编写?

为什么不能使用第三方库? 您是否曾与禁止使用“非Microsoft”库的人讨论过这个问题,假设这是限制。 如此笼统的限制是愚蠢的。

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

如果太多,则可以将事件日志导出到Excel或其他内容,然后按两列进行排序。

显然,您也可以对源进行过滤,以减少干扰。

您可能需要查看Windows高速日志记录:也可以使用System.Diagnostics.Tracing.EventSource在C#/。NET中使用ETW ,这可能会有所帮助,但如果仅记录到EventLog,则无济于事。

本质上,如果您的要求是毫秒级精度,则不应使用Windows事件日志,因为它不提供此功能。 如前所述,有许多日志记录解决方案可以满足您的需求。

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

使用log4net之类的东西来编写基于标准文本的日志会更好吗? log4net编写的日志确实具有毫秒级的精度,并且还具有许多其他功能,例如编写条目的类的标识。 如果/当您需要扩展时,它也可能会更快。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM