gpt4 book ai didi

c# - Windows 事件日志

转载 作者:可可西里 更新时间:2023-11-01 09:25:01 32 4
gpt4 key购买 nike

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

最佳答案

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

    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 事件处理程序:

 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 block 中,因为并非所有源都允许入口编写的监听器(安全性应该很好).如果需要,注释掉的部分会向您展示读取所有日志的示例。

关于c# - Windows 事件日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220626/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com