Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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. Тем не менее, нам просто нужно провести парсинг, чтобы получить то, что нам нужно, используя запись о событиях.