订阅Windows事件日志?

时间:2015-11-03 22:23:55

标签: c# logging event-log event-viewer

我正在处理一个需要经常检查某些事件的Windows事件日志的项目。我想知道:

Is there a way to create a subscription of the Windows Event Log for certain event?

那么,当事件发生时(即事件id = 00001),我可以尽快在代码中获得通知?我正在使用c#。如果无法做到这一点,那么我将不得不继续搜索效率不高的事件日志。

由于

2 个答案:

答案 0 :(得分:13)

当您使用C#时,我认为您应该使用Windows API订阅某些Windows事件。您可以使用EventLogWatcher或EventLog类来完成。您可以在MSDN上找到使用EventLog创建Windows事件日志订阅的示例。

如果您更喜欢EventLogWatcher,请参阅其有限的documentation。这是我的榜样:

exit()

答案 1 :(得分:0)

这是一个简化的示例,它使用在 Windows 事件查看器的过滤器视图上的 XML 选项卡中生成的查询。它加载查询返回的初始记录,然后监视任何未来的项目。

        var query = $"*[System[(EventID=1942) and TimeCreated[timediff(@SystemTime) <= 604800000]]]";
        var decoded = System.Web.HttpUtility.HtmlDecode(query);
        var eventLogQuery = new EventLogQuery("Application", PathType.LogName, decoded);
        var watcher = new EventLogWatcher(eventLogQuery, null, true);
        var count = 0;

        watcher.EventRecordWritten += (object sender, EventRecordWrittenEventArgs e) =>
        {
            count += 1;

            Console.WriteLine($"Found {count} items for query");
        };

        watcher.Enabled = true;

        for (var i = 0; i < 5; i++)
        { 
            System.Threading.Thread.Sleep(10000);
        }