Читать журнал событий в C # - PullRequest
15 голосов
/ 30 июня 2010

Я пытаюсь прочитать журналы событий для моего приложения EventLoggingApp . Проблема заключается в чтении журналов для моего единственного источника (EventLoggingApp).

Этот код читает журналы для каждого источника. В чем проблема? Любой совет?

static void ReadEvenLog()
{
    string eventLogName = "Application";
    string sourceName = "EventLoggingApp";
    string machineName = "Tom";

    EventLog eventLog = new EventLog();
    eventLog.Log = eventLogName;
    eventLog.Source = sourceName;
    eventLog.MachineName = machineName;

    foreach (EventLogEntry log in eventLog.Entries)
    {
        Console.WriteLine("{0}\n",log.Source);
    }
}

Ответы [ 5 ]

18 голосов
/ 07 июля 2016

Попробуйте это:

EventLog log = new EventLog("Security");
var entries = log.Entries.Cast<EventLogEntry>()
                         .Where(x => x.InstanceId == 4624)
                         .Select(x => new
                         {
                             x.MachineName,
                             x.Site,
                             x.Source,
                             x.Message
                         }).ToList();
4 голосов
/ 30 июня 2010

Ознакомьтесь с этой статьей на MSDN. Вы не можете читать записи журнала событий по источникам. Только имя журнала имеет значение. Вместо этого вы можете создать отдельный журнал событий для вашего приложения или отфильтровать записи, проверив свойство Source каждой записи в цикле foreach.

1 голос
/ 30 июня 2010

MSDN (1) (2) говорит, что Источник предназначен только для записи журналов событий.

Нет необходимости указывать источник при чтении только из журнала. Для экземпляра EventLog можно указать только свойства «Имя журнала» и «Имя машины» (имя компьютера-сервера). В любом случае, элемент Entries автоматически заполняется списком записей журнала событий. Вы можете выбрать соответствующий индекс для элемента в этом списке, чтобы прочитать отдельные записи. (1)

0 голосов
/ 27 февраля 2013

Я не совсем уверен, что вы пытались напечатать на консоли. Если это сообщение в каждой записи журнала событий, которое вы пытаетесь распечатать, то внутри цикла foreach вы должны иметь это вместо:

Console.WriteLine(log.Message + "\n");
0 голосов
/ 30 июня 2010

Если вы подключаетесь к localhost, установите MachineName на "."Проверьте, имеет ли пользователь право на чтение из журнала событий

...