.NET TIPS イベント・ログにエントリを書き込むには?(基本編)[C#、VB]デジタルアドバンテージ 一色 政彦2008/08/07 |
|
|
Windows OSには、システムやアプリケーションで起こった問題(エラーなど)を記録するためのイベント・ログという仕組みがある。
システムやアプリケーションで何らかのトラブルがあった際には、Windows OSに標準で搭載されている「イベント ビューア」(下の画面を参照)でイベント・ログの内容を閲覧して情報を収集し、問題解決の糸口とすることも多々あり、イベント・ログはWindowsの運用管理にとって欠かせないものといえるだろう(ただし、Windows 98やMeなど、いわゆる9x系Windowsではイベント・ログはサポートされていないので注意してほしい)。
なお、イベント・ログに登録された(=書き込まれた)各項目は、通常「イベント」と呼ばれ、プログラミングでは項目という意味で「エントリ」と呼ぶ。
本TIPSでは、イベント・ログにエントリを書き込む方法を紹介する。
エントリを書き込むには、最低、以下の3点をあらかじめ決めておく必要がある。
コンピュータ名とは、つまり、どのコンピュータのイベント・ログに書き込むかということだが、通常はローカル・コンピュータであろう。ローカル・コンピュータの場合は「.」と記述すればよい。
イベント・ログ名は、上の画面でも示されているとおり、「アプリケーション」「セキュリティ」「システム」などがある。通常は「アプリケーション」イベント・ログを指定すればよい。「アプリケーション」を指定するには、「Application」と記述する。これら標準のもの以外に、独自のイベント・ログを作成することもできる。これについては後日あらためて紹介する。
イベント・ソース名は、エントリがどこから登録されたものかを示すもので、通常はアプリケーション名となる。
ここではサンプルとして、ローカル・コンピュータ(.)の「アプリケーション」(Application)イベント・ログに、「SampleSource」というイベント・ソース名でエントリを書き込んでみよう。
実際にエントリを書き込む前に、イベント・ソースをあらかじめ作成しておく必要がある。今回の「SampleSource」イベント・ソースは独自に決めたもので、既存のものではないからだ。
イベント・ソースを作成するには、EventLogクラス(System.Diagnostics名前空間)の静的メソッドCreateEventSourceを呼び出す。
CreateEventSourceメソッドは、.NET Framework 1.xと2.0以降では推奨される使い方が若干ことなる。.NET Framework 1.xでは、CreateEventSourceメソッドの第1引数にイベント・ソース名、第2引数にイベント・ログ名、第3引数にコンピュータ名を指定して呼び出すだけだ。.NET Framework 2.0以降では、引数としてEventSourceCreationDataクラス(System.Diagnostics名前空間)のオブジェクトを指定する。
EventSourceCreationDataオブジェクトを取得するには、EventSourceCreationDataクラスのコンストラクタの、第1引数にイベント・ソース名、第2引数にイベント・ログ名を指定してオブジェクト生成(new)すればよい。
EventSourceCreationDataオブジェクトを生成すると、その初期状態でコンピュータ名はローカル・コンピュータ(.)になっているので、今回の場合は設定が不要だが、コンピュータ名を変更したい場合は、EventSourceCreationDataオブジェクトのMachineNameプロパティに指定すればよい。
新規にイベント・ソースを作成する場合には、上記の作成手順のみでよいが、イベント・ソースがすでに存在するかどうか分からない場合には、EventLogクラスの静的メソッドSourceExistsでその有無を判定した方がよい。
SourceExistsメソッドは、第1引数にイベント・ソース名、第2引数にコンピュータ名を指定する(ローカル・コンピュータの場合は、第2引数は指定しなくてもよい)。戻り値がtrueの場合はそのイベント・ソースは存在し、falseの場合は存在しない。
従って今回の場合、SourceExistsメソッドがfalseのときのみ、CreateEventSourceメソッドでイベント・ソースを作成すればよい。
以上で準備が完了したので実際にエントリを書き込もう。
イベント・ログにエントリを書き込むには、EventLogクラスのオブジェクトのWriteEntryメソッドを呼び出す。
まずEventLogオブジェクトを取得するには、コンストラクタの第1引数にイベント・ログ名、第2引数にコンピュータ名、第3引数にイベント・ソース名を指定してオブジェクト生成(new)する。
次にWriteEntryメソッドを呼び出すには、第1引数にエントリで書き込むメッセージ内容を、第2引数にEventLogEntryType列挙体(System.Diagnostics名前空間)の値を指定して呼び出せばよい(さらにこのほかの情報を第3引数以降で設定できるが、これについては後日公開予定の「TIPS:イベント・ログにエントリを書き込むには?(応用編)」で紹介する)。
EventLogEntryType列挙体のメンバは以下の表のとおりだ。
以上の説明を実装したのが、次のサンプル・コード(コンソール・アプリケーション)だ(.NET Framework 2.0の場合)。
|
||
イベント・ログを書き込むサンプル・プログラム(上:C#、下:VB) |
このサンプル・プログラムを実行すると、「メッセージ」という内容のエントリがイベント・ログに書き込まれる。
カテゴリ:クラス・ライブラリ 処理対象:イベント・ログ 使用ライブラリ:EventLogクラス(System.Diagnostics名前空間) 使用ライブラリ:EventSourceCreationDataクラス(System.Diagnostics名前空間) 使用ライブラリ:EventLogEntryType列挙体(System.Diagnostics名前空間) |