Я разрабатываю приложение для сбора журналов событий (безопасности) из нескольких систем Windows. У меня есть обработчик EntryWritten. Я могу отобразить большинство полей из средства просмотра событий в запись EntryWrittenEventArgs в .net. Однако я не могу найти сопоставления для полей Level, OpCode и Task Category, которые отображаются в Event Viewer. Любые идеи о том, как я получаю это в vb.net или C#? БлагодаряЖурнал событий Windows
ответ
EventLog
класса в System.Diagnostics
пространства имен не содержит поле для Level
, OpCode
или Task
. Однако существует класс EventRecord
в пространстве имен System.Diagnostics.Eventing.Reader
, который способен возвращать эти поля. Обратите внимание, что это пространство имен - , в основном используется для извлечения журналов событий с удаленного компьютера. Даже если вы можете использовать его для получения журналов на локальной машине, он открывает локальный канал в системе, что делает его более медленным, чем класс 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
события:
Обратите внимание, что я обернул logWatcher.Enabled = true;
заявление в try-catch
блоке , потому что не все источники позволяют входным письменным слушателям (безопасность должна работать нормально). Заключенный раздел показывает вам пример чтения всех журналов, если вам это нужно.