Как читать только новые события, добавленные в журнал событий? - PullRequest
0 голосов
/ 28 декабря 2018

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

public static void Main(string[] args)
{
    EventLog[] ev;

    ev = EventLog.GetEventLogs();

    Console.WriteLine("Number of logs on computer: " + ev.Length);

    foreach (EventLog log in ev)
    {
        Console.WriteLine("Log: " + log.Log);
        foreach (EventLogEntry entry in log.Entries)
        {
            Console.WriteLine("Entry: " + entry.Message);
            Console.WriteLine("Source: " + entry.Source);
            Console.WriteLine("Category: " + entry.Category);
            Console.WriteLine("EventID: " + entry.Source);
        }
    }
}

Этот код работает нормально.Он отображает все события, которые были сохранены в файлах журнала.Но после этого я хочу прочитать предстоящие события и update them every 10 seconds.

Если я просто продолжу и снова вызову ту же функцию, я получу все события, но я хочу только те события, которые были добавлены заново.Как мне этого добиться?

TL DR: я хотел бы слушать только недавно добавленные события в журнале событий, а не весь журнал событий

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Я сам нашел решение, работая через MSDN.Это для людей, которые могут прийти сюда в будущем, EntryWrittenEventHandler является решением.

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

0 голосов
/ 28 декабря 2018

Вы можете сделать это

EventLog appLogs = new EventLog("Application");

var entries = appLogs.Entries.Cast<EventLogEntry>()
                     .Where(x => x.TimeWritten >= DateTime.Now.AddMinutes(-60))
                     .ToList();

Однако, не имеет значения, сколько времени вы фильтруете по нему, все равно будет столько же времени.

Я не знаю, как это сделать.ускорить это (что я знаю)

Хотя вы можете захотеть посмотреть на EventLog.EntryWritten Event

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

Remnarks

Чтобы получать уведомления о событиях, необходимо установить для параметра EnableRaisingEvents значение true.Вы можете получать уведомления о событиях только тогда, когда записи записаны на локальном компьютере.Вы не можете получать уведомления о записях, написанных на удаленных компьютерах.

EventLog myNewLog = new EventLog("Application", ".", "testEventLogEvent");                 

myNewLog.EntryWritten += new EntryWrittenEventHandler(MyOnEntryWritten);
myNewLog.EnableRaisingEvents = true;

Предположительно, это будет более легким способом, чем попытка опроса EventLog Plumbing

...