Чтение журнала событий в С#

Я пытаюсь читать журналы событий для своего приложения 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);
    }
}

Ответы

Ответ 1

Попробуйте следующее:

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();

Ответ 2

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

Ответ 3

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

Нет необходимости указывать источник при чтении только из журнала. Вы можете указать только имя журнала и имя MachineName (имя сервера компьютера) для экземпляра EventLog. В любом случае элемент "Записи" автоматически заполняется списком записей журнала событий. Вы можете выбрать соответствующий индекс для элемента в этом списке, чтобы читать отдельные записи. (1)

Ответ 4

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

Console.WriteLine(log.Message + "\n");

Ответ 5

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