1

在这里,我正在尝试使用 c# 使用此代码读取本地系统事件日志-

 string eventLogText = "";
        try
        {
            var eventLog = new EventLog("logname", "machinename");
            foreach (var entry in eventLog.Entries)
            {
                 eventLogText += entry;
            }
        }
        catch (Exception eg)
        {
            MessageBox.Show(eg.Message);
        }

它运行良好,但问题是,在变量eventLogText中,我反复得到System.Diagnostics.EventLogEntry,这可能是非常常见的错误,但我不知道该怎么做,因为我对 c# 也很陌生编程也是如此。

其次,我想知道如果系统没有使用管理员帐户登录,在这种情况下读取事件日志会导致任何异常或错误,如果它会是什么解决方案?

需要帮助。在此先感谢。

4

1 回答 1

2

关于您的第一个问题,您只是将变量添加entry到字符串中,即调用该ToString变量的方法。ToString 的默认实现是返回类的名称。(因此重复System.Diagnostics.EventLogEntry输出)

您将需要使用类中的成员EventLogEntry来检索您感兴趣的数据。例如,此控制台应用程序将打印应用程序事件日志中前 10 个条目的源和消息:

static void Main(string[] args)
{

    StringBuilder eventLogText = new StringBuilder();
    try
    {
        var eventLog = new EventLog("Application");
        var tenMostRecentEvents = eventLog.Entries
                                            .Cast<EventLogEntry>()
                                            .Reverse()
                                            .Take(10);
        foreach (EventLogEntry entry in tenMostRecentEvents)
        {
            eventLogText.AppendLine(String.Format("{0} - {1}: {2}", 
                                          entry.Source, 
                                          entry.TimeWritten, 
                                          entry.Message));
        }

        Console.WriteLine(eventLogText.ToString());
    }
    catch (System.Security.SecurityException ex)
    {
        Console.WriteLine(ex);
    }
    Console.ReadLine(); 
}

关于您的第二个问题,您的代码将需要适当的权限才能读取该事件日志。例如,如果我使用这一行更改读取安全事件日志的代码,var eventLog = new EventLog("Security");我将收到安全异常。您可以查看此答案以获取更多信息

希望能帮助到你!

于 2013-06-30T13:01:34.983 回答