Я использовал System.Diagnostics.EventLog для просмотра журналов на локальном компьютере. Однако я хотел бы открыть архив журнала событий (.evt или .evtx) и просмотреть журналы, которые содержатся в сохраненном файле. Мне просто нужно просмотреть временные метки, сообщения, источники и т.д., Связанные с журналами в файле. Это можно сделать на С#?
Как открыть архив журнала событий в .NET?
Ответ 1
Проверьте пространство имен System.Diagnostics.Eventing.Reader
. В частности, класс EventLogQuery
.
http://msdn.microsoft.com/en-us/library/bb671200(v=VS.90).aspx
Ответ 2
Попробуйте LogParser инструмент от Microsoft. Он может извлекать любые данные из журналов любого формата журнала, используя SQL-подобный язык выбора. Он также может быть использован из любого приложения .NET. Пример синтаксического анализа журналов CSV (я считаю, что вы можете использовать этот код для файлов EVT с небольшими изменениями):
public IList<LogRow> GetLog()
{
return Load("SELECT *, OUT_ROW_NUMBER() FROM logfile*.log WHERE Field2='Performance' ORDER BY Field1 ASC");
}
private static IList<LogRow> Load(string sql)
{
IEnumerable<string[]> log = ParseLog(sql);
return Convert(log);
}
private static IList<LogRow> Convert(IEnumerable<string[]> log)
{
return log.Select(logRecord => new LogRow
{
TimeStamp = logRecord[2],
Category = logRecord[3],
Machine = logRecord[4],
ThreadId = logRecord[5],
ProcessId = logRecord[6],
ProcessName = logRecord[7],
DomainName = logRecord[8],
Message = logRecord[9],
Number = logRecord[10]
}).ToList();
}
private static IEnumerable<string[]> ParseLog(string query)
{
var records = new LogQueryClassClass().Execute(
query,
new COMCSVInputContextClass { headerRow = false, iTsFormat = "yyyy-MM-dd HH:mm:ss.fff" });
var entries = new List<string[]>();
while (!records.atEnd())
{
entries.Add(records.getRecord().toNativeString("CSVseparator").Split(
new[] { "CSVseparator" },
StringSplitOptions.None));
records.moveNext();
}
records.close();
return entries;
}
Ответ 3
Если вы намерены прочитать сохраненные журналы, мы можем сделать это с помощью EventLogReader. Он в основном принимает два параметра - имя файла (как в пути к файлу) и второй параметр, определяющий тип пути. Для вашей справки, скажем, у вас есть сохраненный файл .evtx - temp.evtx, вы можете прочитать его, как в:
new EventLogReader(filepath, PathType.Filepath);
Это дает вам журнал регистрации событий, который можно использовать для чтения событий. И еще больше, если вы захотите прочитать контент из него, мы можем использовать "Свойства", который в основном представляет собой список строк. Можете прочитать его, проанализировать и получить любую необходимую информацию.
Я согласен с тем, что у нас нет положения о том, чтобы напрямую получить все детали как то, что мы получаем с помощью EventLogEntry. Тем не менее, нам просто нужно провести парсинг, чтобы получить то, что нам нужно, используя запись о событиях.