C# 正在读取本地事件日志?

C# 正在读取本地事件日志?,c#,winforms,readeventlog,C#,Winforms,Readeventlog,在这里,我尝试使用c#读取本地系统事件日志,使用以下代码- string eventLogText = ""; try { var eventLog = new EventLog("logname", "machinename"); foreach (var entry in eventLog.Entries) { eventLogText += entry

在这里,我尝试使用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中,我只得到系统。诊断。EventLogEntry重复,这可能是一个非常常见的错误,但我不知道该怎么做,因为我对c#以及编程非常陌生

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


需要帮助。请提前感谢。

关于您的第一个问题,您只需将变量
条目
添加到字符串中,这将调用该变量的
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(); 
}
static void Main(字符串[]args)
{
StringBuilder eventLogText=新建StringBuilder();
尝试
{
var eventLog=新事件日志(“应用程序”);
var tenMostRecentEvents=eventLog.Entries
.Cast()
.Reverse()
.采取(10);
foreach(tenMostRecentEvents中的EventLogEntry条目)
{
AppendLine(String.Format(“{0}-{1}:{2}”),
条目.来源:,
entry.timewrited,
条目(信息));
}
Console.WriteLine(eventLogText.ToString());
}
捕获(System.Security.SecurityException ex)
{
控制台写入线(ex);
}
Console.ReadLine();
}
关于第二个问题,您的代码需要适当的权限才能读取该事件日志。例如,如果我更改代码,请使用以下行读取安全事件日志
var eventLog=new eventLog(“Security”)我将收到一个安全异常。你可以查一下


希望有帮助

对于第二个问题,您可以尝试:)您想对读取的数据做什么?哦,是的,为什么我没有想到这个想法:)我想在某种条件下过滤数据,比如最近的事件条目。