在C#中读取事件日志

时间:2010-06-30 09:29:01

标签: c# events logging

我正在尝试读取应用 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 个答案:

答案 0 :(得分:18)

试试这个:

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

答案 1 :(得分:4)

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

答案 2 :(得分:1)

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

  

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

答案 3 :(得分:0)

我不确定你在控制台上打印的是什么。如果您尝试打印的每个事件日志条目中都是消息,那么在foreach循环内您应该改为:

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

答案 4 :(得分:-2)

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