获取操作日志EventLog失败

时间:2013-06-23 18:53:12

标签: c# event-log

运行此代码时,我得到InvalidOperationException

static void Main(string[] args)
{
    var aLog = new EventLog("Microsoft-Windows-Diagnostics-Performance/Operational");
    EventLogEntry entry;
    var entries = aLog.Entries;
    var stack = new Stack<EventLogEntry>();
    for (var i = 0; i < entries.Count; i++)
    {
        entry = entries[i];
        stack.Push(entry);
    }
    entry = stack.Pop();// only display the last record
    Console.WriteLine("[Index]\t" + entry.Index +
                        "\n[EventID]\t" + entry.InstanceId +
                        "\n[TimeWritten]\t" + entry.TimeWritten +
                        "\n[MachineName]\t" + entry.MachineName +
                        "\n[Source]\t" + entry.Source +
                        "\n[UserName]\t" + entry.UserName +
                        "\n[Message]\t" + entry.Message +
                        "\n---------------------------------------------------\n");
}

例外说:

  

此计算机上不存在Microsoft-Windows-Diagnostics-Performance / Operational

为什么?

1 个答案:

答案 0 :(得分:2)

更新

由于您使用的是EventLog类,因此构造函数的有效“类别”(确定这不是正确的单词...)必须为 Application 系统 Windows日志 树下可用的任何其他日志名称,不在 应用程序和服务日志 树。

const string LogName = "Microsoft-Windows-Diagnostics-Performance/Operational";
var query = new EventLogQuery(LogName, PathType.LogName, "*[System/Level=2]");

using (var reader = new EventLogReader(query))
{
    var currentEvent = reader.ReadEvent();
    while (currentEvent != null)
    {
        // Do your stuff here...

        // Read next event.
        currentEvent = reader.ReadEvent();
    }
}

此代码段对我有用。

请记住在提升权限下运行此功能。如果没有,您将收到一个未经授权的例外投掷。

第一个答案

因为您正在使用不存在的类别初始化EventLog类。

典型的有效类别为应用系统等。

EventLog的单个参数构造函数是指注册表的日志。 [^]