Как открыть сохраненный архив журнала событий в .NET? - PullRequest
12 голосов
/ 08 июня 2010

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

Ответы [ 3 ]

10 голосов
/ 08 июня 2010

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

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

2 голосов
/ 08 июня 2010

Попробуйте 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;
        }
0 голосов
/ 03 октября 2017

Если вы хотите прочитать сохраненные журналы, мы можем сделать это с помощью EventLogReader.В основном он принимает два параметра - имя файла (как в пути к файлу) и второй параметр, определяющий тип пути.Для справки, скажем, у вас есть сохраненный файл .evtx - temp.evtx, вы можете прочитать его следующим образом:

new EventLogReader(filepath, PathType.Filepath);

Это дает вам средство чтения журнала событий, которое можно использовать для чтения событий.Более того, если вы хотите прочитать из него содержимое, мы можем использовать свойства, которые в основном представляют собой список строк.Можете прочитать, проанализировать и получить любую необходимую вам информацию.

Я согласен, что у нас нет возможности напрямую получать все детали, как то, что мы получаем с помощью EventLogEntry.Тем не менее, нам просто нужно провести анализ, чтобы получить то, что нам нужно, используя запись событий.

...