在C#中读取事件日志

我正在尝试为我的应用程序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); } } 

试试这个:

 EventLog log = new EventLog("Security"); var entries = log.Entries.Cast() .Where(x => x.InstanceId == 4624) .Select(x => new { x.MachineName, x.Site, x.Source, x.Message }).ToList(); 

在MSDN上查看这篇文章 。 您无法按源读取事件日志条目。 只有日志名称很重要。 相反,您可以通过validationforeach循环中每个条目的Source属性,为您的应用程序或过滤条目创建单独的事件日志。

MSDN (1) (2)表示Source仅用于编写事件日志。

仅从日志中读取时不必指定Source。 您只能为EventLog实例指定日志名称和MachineName(服务器计算机名称)属性。 在任何一种情况下,条目成员都会自动填充事件日志的条目列表。 您可以为此列表中的项目选择适当的索引以读取各个条目。 (1)

我不确定你在控制台上打印的是什么。 如果它是您尝试打印的每个事件日志条目中的消息 ,则在foreach循环内应该具有以下内容:

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

如果连接到localhost,则将MachineName设置为“。” 检查用户是否有权从事件日志中读取