2010-06-30 79 views
13

我正在嘗試讀取我的應用程序的事件日誌EventLoggingApp。問題是爲我的單一來源(EventLoggingApp)讀取日誌。在C中閱讀事件日誌#

此代碼爲每個來源讀取日誌。問題是什麼?有什麼建議?

static void ReadEvenLog() 
{ 
    string eventLogName = "Application"; 
    string sourceName = "EventLoggingApp"; 
    string machineName = "Tom"; 

    EventLog eventLog = new EventLog(); 
    eventLog.Log = eventLogName; 
    eventLog.Source = sourceName; 
    eventLog.MachineName = machineName; 

    foreach (EventLogEntry log in eventLog.Entries) 
    { 
     Console.WriteLine("{0}\n",log.Source); 
    } 
} 

回答

-2

如果連接到本地主機,請將MachineName設置爲「。」。 檢查用戶是否有權從事件日誌中讀取

+1

因爲他得到所有日誌從他的機器上,沒有安全問題。 – atamanroman 2010-06-30 09:50:39

4

在MSDN上查看此article。您無法按來源閱讀事件日誌條目。只有日誌名稱很重要。相反,您可以通過驗證foreach循環中每個條目的Source屬性來爲應用程序或篩選條目創建單獨的事件日誌。

+2

Thx,我來自斯洛伐克,你的英文比我的要好得多:) – Tom159 2010-06-30 11:10:11

1

MSDN (1)(2)表示Source僅用於寫入事件日誌。

僅當從日誌中讀取時,沒有必要指定源。您只能指定EventLog實例的日誌名稱和計算機名稱(服務器計算機名稱)屬性。無論哪種情況,入口成員都會自動填入事件日誌的條目列表。您可以爲列表中的項目選擇適當的索引來閱讀各個條目。 (1)

0

我不太確定你試圖在控制檯上打印什麼。如果是消息在每個事件日誌條目,你要打印的foreach循環內部,你應該有這個代替:

Console.WriteLine(log.Message + "\n"); 
11

試試這個:

EventLog log = new EventLog("Security"); 
var entries = log.Entries.Cast<EventLogEntry>() 
         .Where(x => x.InstanceId == 4624) 
         .Select(x => new 
         { 
          x.MachineName, 
          x.Site, 
          x.Source, 
          x.Message 
         }).ToList();