2013-06-30 71 views
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#以及编程都非常陌生。

其次,我想知道,如果一个系统没有使用管理员账号,在这种情况下,阅读事件日志将导致任何异常或错误,如果记录它会是什么将是它的解决方案吗?

需要帮助。提前感谢。

+0

第二个问题 - 你可以试试:) – ilansch

+0

你想用读取的数据做什么? –

+0

哦,是的,为什么这个想法没有出现在我的脑海:) –

回答

2

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

您将需要使用the membersEventLogEntry类来检索您感兴趣的数据。例如,该控制台应用程序将打印前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");我将收到一个安全异常。你可以检查this answer for more information

希望它有帮助!