首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows事件日志

Windows事件日志
EN

Stack Overflow用户
提问于 2013-08-13 22:58:18
回答 1查看 2.2K关注 0票数 3

我正在开发一个应用程序来从多个Windows系统捕获事件日志(安全性)。我有一个EntryWritten的处理程序。我能够将大多数字段从事件查看器映射到.net中的.net条目。但是,我似乎找不到事件查看器中显示的级别、OpCode和任务类别字段的映射。关于我是如何在vb.net或c#中得到这个的,有什么想法吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-14 00:39:42

EventLog类在System.Diagnostics命名空间中不包含用于LevelOpCodeTask的字段。但是,在EventRecord名称空间中有能够返回这些字段的System.Diagnostics.Eventing.Reader类。注意,这个名称空间是,主要用于从远程机器检索事件日志。即使您也可以使用它在本地机器上获取日志,它也会向系统打开一个本地管道,这使得它比EventLog类慢。但是,如果您确实需要访问这些字段,通常使用这个类的方式如下:

代码语言:javascript
复制
    private void LoadEventLogs()
    {
        List<EventRecord> eventLogs = new List<EventRecord>();

        EventLogSession session = new EventLogSession();

        foreach (string logName in session.GetLogNames())
        {
            EventLogQuery query = new EventLogQuery(logName, PathType.LogName);
            query.TolerateQueryErrors = true;
            query.Session = session;

            EventLogWatcher logWatcher = new EventLogWatcher(query);
            logWatcher.EventRecordWritten += 
                   new EventHandler<EventRecordWrittenEventArgs>(LogWatcher_EventRecordWritten);

            try
            {
                logWatcher.Enabled = true;
            }
            catch (EventLogException) { }


            // This is how you'd read the logs
            //using (EventLogReader reader = new EventLogReader(query))
            //{
            //    for (EventRecord eventInstance = reader.ReadEvent(); eventInstance != null; eventInstance = reader.ReadEvent())
            //    {
            //        eventLogs.Add(eventInstance);
            //    }
            //}
        }
    }

LogWatcher_EventRecordWritten事件处理程序:

代码语言:javascript
复制
 private void LogWatcher_EventRecordWritten(object sender, EventRecordWrittenEventArgs e)
    {
        var level = e.EventRecord.Level;
        var task = e.EventRecord.TaskDisplayName;
        var opCode = e.EventRecord.OpcodeDisplayName;
        // Other properties
    }

请注意,我将logWatcher.Enabled = true;语句封装在一个try-catch块中,因为并不是所有的源都允许写条目的侦听器(安全性应该很好)。注释部分向您展示了一个读取所有日志的示例(如果需要的话)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18220626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档