.NET TIPS イベント・ログにエントリを書き込むには?(基本編)[C#、VB]デジタルアドバンテージ 一色 政彦2008/08/07 |
|
|
Windows OSには、システムやアプリケーションで起こった問題(エラーなど)を記録するためのイベント・ログという仕組みがある。
システムやアプリケーションで何らかのトラブルがあった際には、Windows OSに標準で搭載されている「イベント ビューア」(下の画面を参照)でイベント・ログの内容を閲覧して情報を収集し、問題解決の糸口とすることも多々あり、イベント・ログはWindowsの運用管理にとって欠かせないものといえるだろう(ただし、Windows 98やMeなど、いわゆる9x系Windowsではイベント・ログはサポートされていないので注意してほしい)。
Windows OSに標準で搭載されている「イベント ビューア」 | ||||||
[スタート]メニューやデスクトップ上の[マイ コンピュータ]を右クリックして、表示されるコンテキスト・メニューから[管理]を選択すると表示される。 | ||||||
|
なお、イベント・ログに登録された(=書き込まれた)各項目は、通常「イベント」と呼ばれ、プログラミングでは項目という意味で「エントリ」と呼ぶ。
本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列挙体のメンバは以下の表のとおりだ。
メンバ | 説明 |
Information | 情報。成功した操作を示す |
Warning | 警告。今後問題の原因となり得る問題を示す |
Error | エラー。ユーザーに知らせる必要がある重大な問題を示す |
SuccessAudit | 成功した監査。監査アクセスに成功したこと(例えば、ログオンに成功したなど)を示す |
FailureAudit | 監査エラー。監査アクセスに失敗したこと(ファイルを開けなかったなど)を示す |
EventLogEntryType列挙体のメンバ |
以上の説明を実装したのが、次のサンプル・コード(コンソール・アプリケーション)だ(.NET Framework 2.0の場合)。
|
||
イベント・ログを書き込むサンプル・プログラム(上:C#、下:VB) |
このサンプル・プログラムを実行すると、「メッセージ」という内容のエントリがイベント・ログに書き込まれる。
カテゴリ:クラス・ライブラリ 処理対象:イベント・ログ 使用ライブラリ:EventLogクラス(System.Diagnostics名前空間) 使用ライブラリ:EventSourceCreationDataクラス(System.Diagnostics名前空間) 使用ライブラリ:EventLogEntryType列挙体(System.Diagnostics名前空間) |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|