2009-04-29 23 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"に書きました。しかし、"NewLog""OldSource"で作成しようとしましたが、失敗しました。

私は、開発システムを再起動して全く同じコード("NewLog""OldSource")を実行して問題が解決したことを確認しました。

私は再起動が実際にそれを修正したことがあると思います! :)

+1

ありがとう、これは私が何かを記録し、ソースを変更し、古いソースを削除し、新しいソースに何も書き込まれていないことを確認しました。 –

+0

素晴らしい、嬉しい助けて! :)私はドキュメントのラインを見つけるのにどれくらいの時間がかかったか恥ずかしいです。 :) –

関連する問題