Чтение журнала событий в С#
Я пытаюсь читать журналы событий для своего приложения 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 на "."
Проверьте, имеет ли пользователь право читать из журнала событий