Как открыть сохраненный архив журнала событий в.NET?

Я использовал Систему. Диагностика. EventLog для просмотра входа в систему локальный компьютер. Однако я хотел бы открыть сохраненный архив журнала событий (.evt или .evtx) и просмотреть журналы, которые содержатся в сохраненном файле. Я просто должен просмотреть метки времени, сообщения, источники, и т.д. связанные с журналами в файле. Это может быть сделано в C#?

12
задан Brian 8 June 2010 в 19:21
поделиться

2 ответа

Проверьте пространство имен System.Diagnostics.Eventing.Reader. В частности, класс EventLogQuery.

http://msdn.microsoft.com/en-us/library/bb671200(v=VS.90).aspx

10
ответ дан 2 December 2019 в 21:42
поделиться

Попробуйте инструмент 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;
        }
2
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: