2009-04-29 50 views
3

我試圖通過System.Diagnostics.EventLog設置基本日誌記錄到.net中的windows事件日誌,但我沒有看到任何事件實際上正在寫入日誌。請看下面的代碼:如何寫入自定義Windows事件日誌?

// Elsewhere in the class 
private static readonly string EventLogName = "LogName"; 
private static readonly string EventLogSource = "AppName"; 

// In the only function that does something 
if (!EventLog.Exists(EventLogName)) 
{ 
    EventLog.CreateEventSource(EventLogSource, EventLogName); 
    return; 
} 
else 
{ 
    Trace.TraceInformation("Attempting log"); 

    // This doesn't write anything 
    EventLog.WriteEntry(EventLogSource, 
     "StaticWriteEntry", 
     EventLogEntryType.Error); 

    // Neither does this 
    using (var log = new EventLog()) 
    { 
     log.Log = EventLogName; 
     log.Source = EventLogSource; 
     log.WriteEntry("WriteEntry?", EventLogEntryType.Error); 
    } 
} 
return; 

第一次通過創建日誌並退出該應用程序,按照MSDN樣本。當然,這個日誌創建最終會進入設置。後續運行嘗試將消息記錄到創建的事件日誌中。

沒有任何異常被拋出。該日誌似乎已成功創建(我可以在Windows事件查看器中打開它)。沒有相關的記錄到安全日誌。

沒有消息通過WriteEntry()記錄。由於名稱不匹配,它們也未放置在應用程序日誌中。在這種特殊情況下,我在禁用UAC的管理員帳戶中運行Server2008。 (這是一個較大的遺留產品的一小部分,需要不幸的環境。)我做錯了什麼?

(我這樣做是因爲我想在我的app.config使用一個EventLogTraceListener,它並沒有寫任何東西,所以這是故障診斷這個問題的一部分。)

回答

4

的問題似乎是與源名稱相關。具體來說,如果我更改源名稱,我可以成功寫入。這是由於在該EventLog.Source文檔底部的下面一行:如果源已經被映射到一個日誌

,而你是重新映射到一個新的日誌,你必須重新啓動計算機使更改生效。

在開發過程中,日誌名稱和日誌源已創建並銷燬了幾次,並且我可能已更改日誌名而不更改源名稱。

假設我的原始來源和日誌是"OldSource""OldLog"。我通過更改代碼來嘗試寫入"NewSource""NewLog"來確定這可能是問題的根源。當我兩次都改變時,我成功創建並寫信給"NewLog"。當我嘗試通過"OldSource"創建"NewLog"來嘗試寫入時,它失敗了。

我確認這是問題,然後重新啓動我的開發系統並運行完全相同的代碼(使用"NewLog""OldSource"),它工作。

我想這是一次重新啓動實際上確實修復它! :)

+1

謝謝,這也解決了我的問題,我登錄了某些東西,更改了源代碼,刪除了舊源代碼,然後發現沒有任何內容寫入到我的新源中。 – 2009-09-14 16:18:14

相關問題