Работа с eventlog - получение значения поля

187
14 июля 2017, 02:18

Пишу программу, которая будет парсить определенные события в журнале событий windows и на основании данных в событии возвращать некоторые строки со значениями.

На данный момент - выбрать нужные события из самого журнала получается. Не получается из выбранных событий получить необходимые данные. Насколько я понял, мне необходимо получать событие в xml, после чего уже разбирать его.

Хотя бы примерно - как это можно сделать? Немного погуглив - нашел разрозненную информацию, адекватное целое собрать не вышло. Возможно, у кого то есть опыт решения подобных задач? Спасибо!

private void button1_MouseClick(object sender, MouseEventArgs e)
    {
        string logName = "Security";
        string machineName = "compname";
        long instanceId = 4905;
        try
        {
            List<string> events = new List<string>();
            EventLog log = new EventLog(logName, machineName);
            foreach (EventLogEntry entry in log.Entries)
            {
                if (entry.InstanceId == instanceId)
                {
                    string fieldname = "ProcessName";
                    var expression = new Regex(string.Format(@"\s*{0}:\s*-\s*(.+)\r\n", fieldname));
                    Match match = expression.Match(Text);
                    if (match.Success)
                    {
                        string field = match.Groups[1].ToString();
                        events.Add(field);
                    }
                    //events.Add(entry.Message);
                }
            }
            StringBuilder strbuild = new StringBuilder();
            foreach (string str in events)
            {
                strbuild.Append(str.ToString()).AppendLine();
            }
            MessageBox.Show(strbuild.ToString());
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
Answer 1

Добрый день. Вы наверное используете System.Diagnostics.EventLog . С ним очень тяжело работать для анализа событий. Посмотрите в сторону System.Diagnostics.Eventing.Reader.EventRecord Вот простой пример как получить событие с определенным ИД:

        using System.Diagnostics.Eventing.Reader;
        ...
        int eventId = 17137;
        string queryString = "*[System/EventID=" + eventId + "]";
        EventLogQuery query = new EventLogQuery("Application", PathType.LogName, queryString);
        EventLogReader eventReader = new EventLogReader(query);          
        EventRecord er = eventReader.ReadEvent();
READ ALSO
HierarchicalDataTempalte c ItemTemplateSelector

HierarchicalDataTempalte c ItemTemplateSelector

Имеется DataTemplateSelector:

228
Xaml Triger не срабатывает

Xaml Triger не срабатывает

привет есть стиль

204
Программно изменить таймер пробуждения в управлении электропитанием

Программно изменить таймер пробуждения в управлении электропитанием

На удаленных филиалах стоят компьютеры (XP, 7, 10), интернет там ужасныйИх необходимо периодически включать для прокачки данных

216
Xamarin подключиться к серверу через WiFi

Xamarin подключиться к серверу через WiFi

Есть приложение которое должно подключаться к серверу и принимать данныеСервер находится на PC

208