Windows XP と Windows 7 の両方で、イベント ログを CSV ファイルに保存したいと考えています。
Windows XP では、手動で行うことができます。「イベント ビューア」(EVENTVWR
またはEVENTVWR.MSC
コマンド ライン) を開き、たとえば、「アプリケーション」ログを右クリックして、コンテキスト メニュー コマンドの「ログ ファイルに名前を付けて保存」を選択します。および「CSV(カンマ区切り)(* .csv)」で、最終的にログがファイルに保存されます。
このファイルには、すべてのログ情報が含まれています。すべてのイベントの完全な形式のメッセージが含まれています。
単にコンテキスト メニュー コマンドの [リストのエクスポート] を起動すると、代わりに のようなイベントの「メタデータ」の単なるリストが取得されますType, Date, Time, Source, Category, Event, User, Computer
。
Windows XP で使用可能な API、つまりEvent Logging Functions (Windows)を参照したところ、次のことがわかりました。
BackupEventLog
では、バックアップ ファイルの形式を選択できません。つまり、バイナリ形式で保存されますが、これは役に立ちません。ReadEventLog
構造を介してメタデータEVENTLOGRECORD
と、多くの作業を伴う完全にフォーマットされたメッセージを取得するための指示のみを提供します。
イベント ID は、ソース名と言語 ID とともに、イベントをより詳細に説明する文字列を識別します。文字列は置換文字列として使用され、メッセージ文字列にマージされて完全なメッセージが作成されます。メッセージ文字列は、レジストリのソース エントリで指定されたメッセージ ファイルに含まれています。メッセージ ファイルから適切なメッセージ文字列を取得するには、メッセージ ファイルを LoadLibrary 関数で読み込み、FormatMessage 関数を使用します。
さて、それは大変な作業です:source
レジストリに移動して (どこで? 可能性のある場所が複数あるのではないかと心配しています...)、リソース ファイル名を見つけ、 でファイルをロードしLoadLibrary
、メッセージを でフォーマットしますFormatMessage
。
何か不足していますか?ショートカットはありますか?Microsoft は、ログを CSV 形式でバックアップするための単純な API を提供してくれませんか? 結局、彼らはすでに内部にコードを書いていましたeventvwr
...
今は少しがっかりしており、Windows Vista 以降に利用可能なEvt*
API ( Windows イベント ログ機能 (Windows) ) を参照していませんでした。