2012-01-11 23 views
3

Windowsイベントログを読み込むためにC#を使用しています。問題は、イベントビューアに表示される情報が、C#から取得したデータと常に一致するとは限りません。例えばC#(Source!= ProviderName!= SourceName)を使用してWindowsイベントログを読み取る

EventViewer "ソース":"ユーザープロファイルサービス"

EventLogEntryクラスを使用します。プロパティ "ソース":"Microsoft Windowsユーザープロファイルサービス"

EventLogReaderクラスの使用:プロパティ "ProviderName":"Microsoft-Windows-User Profiles Service"

WMIを使用した:「sourcenameここ」:「Microsoft Windowsユーザープロファイルサービス」

は、私は私がこの情報を入手することができEventViewerに表示正確な情報を読み取ることができる必要がありますか?

のEventLogメッセージを読む

...

EventLogEntryクラスを使用して、EventLogにメッセージを読んで、私は時折、次の文字列を取得:

説明イベントID "XXX" のソース内を"xxx"が見つかりません

また、これはEventViewerに表示されるメッセージと一致しません...私はイベントLogReader.FormatDescription()メソッドを呼び出すと、正しい(EventViewerと同じですが)メッセージが表示されますが、一部のエントリではnullを返し、EventLogEntry.Messageには適切なテキストが含まれています。

EventViewerに表示されているメッセージと同じメッセージを取得するために、イベントのメッセージを取得する正しい方法は何ですか?

+0

@ Gregory A Beamerと一緒に行くと、私は主にログに情報を入れますが、それを理解したら.netのクラスは正常に機能しました。 WMI、私はiffyであることが判明しました。 –

答えて

2
var eventLog = new EventLog("logName", "machine", "source"); 
foreach(var entry in eventLog.Entries) 
{ 
} 

これは、ログと対話する際のかなり基本的なものです。そのソースをより深くフィルタリングする必要がある場合は、エントリにLINQクエリを記述することができます。示されるようにhere

エラーに関して、1つの一般的な理由は、該当するボックスのイベントおよび/またはレジストリへの適切なアクセス権を持っていないためです。あなたがEventViewerで問題のデータを見ることができるので、私は許可エラーが良い可能性があると思っています。

+1

これも私の最初のアプローチでしたが、EventLogEntryクラスの "Source"プロパティがEventViewerの "Source"列と必ずしも一致しないことが判明しました。また、 "Message"テキスト( "ソース" xxx "のイベントID" xxx "の説明が見つかりません)の問題は、コードの使用時に発生します。 – flayn

1

イベントビューアの[ソース]列に表示されている[ソース]文字列が省略されているようです。また、C#でEventLogを作成しようとすると、logtypeだけが問題になるようです。 "Application"、 "System"など。EventLogを作成すると、ソースを指定したものに関係なく、そのログタイプのすべてのエントリが格納されます。

"Source"に基づいてイベントを取得するには、エントリを反復処理し、その "Source"のエントリだけをフィルタします。実際のソース名は、イベントビューアに表示される名前と同じではないことに注意してください。たとえば、ソース "Winlogon"の場合、実際のソース名は "Microsoft-Windows-Winlogon"となります。

関連する問題