2013-06-30 117 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

希望它有幫助!