チュートリアル : イベント ログ、イベント ソース、およびエントリの基礎
更新 : 2007 年 11 月
このチュートリアルでは、Visual Studio アプリケーションにおけるイベント ログの主要な機能を見ていきます。このチュートリアルでは、次の作業を行う方法について説明します。
EventLog コンポーネントを作成する。
カスタム イベント ログを作成するコードや削除するコードを記述する。
カスタム ログに各種のエントリを書き込む。
カスタム ログからエントリを読み取る。
ログおよびイベント ソースが存在することを確認する。
ログのエントリを消去する。
サーバー エクスプローラを使用して、イベント ログ アクションの結果を確認する。
メモ : |
---|
お使いのマシンで、Visual Studio ユーザー インターフェイスの一部の要素の名前や場所が、次の手順とは異なる場合があります。これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。 |
ユーザー インターフェイスの作成
このチュートリアルでは、Windows アプリケーションを作成し、そのアプリケーションで一連のコントロールを使って一連のイベント ログ アクションを起動します。
アプリケーションのフォームおよびコントロールを作成するには
[新しいプロジェクト] ダイアログ ボックスで、Visual Basic または Visual C#Windows アプリケーションを作成し、EventLogApp1 と名前を付けます。
フォームに 8 個のボタンを追加し、次のプロパティを設定します。
コントロール
Text プロパティ
Name プロパティ
Button1
Create Custom Log
CreateLog
Button2
Delete Log
DeleteLog
Button3
Write Entry
WriteEntry
Button4
Clear Log
ClearLog
Button5
Verify Log Exists
VerifyLog
Button6
Verify Source Exists
VerifySource
Button7
Remove Event Source
RemoveSource
Button8
Read Entry
ReadEntry
各ボタンに対して、以下の操作を実行します。
デザイナでボタンに対する既定のイベント ハンドラを作成するために、そのボタンをダブルクリックします。コード エディタに、ボタンの Click イベントに対するスタブが表示されます。
[デザイン] ビューに戻り、次のボタンをダブルクリックします。
この操作を繰り返して、すべてのボタンに既定のイベント ハンドラ スタブを作成します。
ツールボックス の [コンポーネント] タブから、EventLog コンポーネントをフォームにドラッグします。
フォームの下部にあるコンポーネント トレイ領域に、EventLog コンポーネントのインスタンスが表示されます。
カスタム ログの作成と削除
ここでは、使用するソースがまだ存在しないことを SourceExists メソッドで確認し、存在しないログの名前を指定して CreateEventSource メソッドを呼び出します。このログは存在しないため、このコードが実行されるとシステムは自動的にカスタム ログを作成します。
カスタム ログを作成するには
コード エディタで、CreateLog_Click プロシージャを探します。
次のコードを入力します。イベント ログとソースはペアで作成されます。イベント ログが作成される前にソースが存在することはできません。イベント ログを作成した後、新しいイベント ログにアクセスするための EventLog コンポーネントを設定します。
' Source cannot already exist before creating the log. If EventLog.SourceExists("Source1") Then EventLog.DeleteEventSource("Source1") End If ' Logs and Sources are created as a pair. EventLog.CreateEventSource("Source1", "NewLog1") ' Associate the EventLog component with the new log. EventLog1.Log = "NewLog1" EventLog1.Source = "Source1"
// Source cannot already exist before creating the log. if (System.Diagnostics.EventLog.SourceExists("Source1")) { System.Diagnostics.EventLog.DeleteEventSource("Source1"); } // Logs and Sources are created as a pair. System.Diagnostics.EventLog.CreateEventSource("Source1", "NewLog1"); // Associate the EventLog component with the new log. eventLog1.Log = "NewLog1"; eventLog1.Source = "Source1";
セキュリティに関するメモ : イベント ログを作成する場合は、リソースが既に存在するときの処理を決定する必要があります。悪意のあるユーザーによって作成された別のプロセスがイベント ログを作成し、アクセス権を持っている可能性があります。イベント ログにデータを配置すると、そのデータを他のプロセスから利用できるようになります。
カスタム ログを削除するには
コード エディタで、DeleteLog_Click プロシージャを探します。
次のコードを入力します。
If EventLog.Exists("NewLog1") Then EventLog.Delete("NewLog1") End If
if (System.Diagnostics.EventLog.Exists("NewLog1")) { System.Diagnostics.EventLog.Delete("NewLog1"); }
ログへのエントリの書き込み
ここでは、作成した EventLog コンポーネントのインスタンスを使用してログにエントリを書き込みます。そのためには、まず、先ほど作成したソース文字列を使用してコンポーネントを設定します。その後、書き込むエントリを 2 つ指定します (情報イベントとエラーイベント)。
ログにエントリを書き込むには
コード エディタで、WriteEntry_Click プロシージャを探します。
次のコードを入力します。このコードは、オーバーロードされた WriteEntry メソッドを使ってイベント ログに書き込みます。2 つ目のフォームでは、メッセージの種類を指定できます。サーバー エクスプローラを使って、このトピックの「コードのテスト」セクションのコードを表示すると、異なる種類のエントリがそれぞれ異なるアイコンで示されます。
EventLog1.WriteEntry("This is an informational message") EventLog1.WriteEntry("This is an error message", _ Diagnostics.EventLogEntryType.Error)
eventLog1.WriteEntry("This is an informational message"); eventLog1.WriteEntry("This is an error message", System.Diagnostics.EventLogEntryType.Error);
ログのエントリの消去
ここでは、Clear メソッドを使用してカスタム ログから既存のエントリを消去します。
ログのエントリを消去するには
コード エディタで、ClearLog_Click プロシージャを探します。
EventLog コンポーネントのインスタンスに対して Clear メソッドを呼び出します。
EventLog1.Clear()
eventLog1.Clear();
ログおよびソースの確認
ここでは、2 つのプロシージャを作成します。カスタム ログが存在することを確認するプロシージャと、ソース文字列が存在することを確認するプロシージャです。これらのプロシージャを使用して、プロジェクトの実行時に行う各種のアクションの結果をテストします。
カスタム ログの存在を確認するには
コード エディタで、VerifyLog_Click プロシージャを探します。
指定されたイベント ログが存在するかどうかを評価して true または false を表示するメッセージ ボックスを作成します。次のコードを使用します。
Dim logExists As Boolean = EventLog.Exists("NewLog1") MessageBox.Show("Does the log exist? " & logExists.ToString())
bool logExists = System.Diagnostics.EventLog.Exists("NewLog1"); MessageBox.Show("Does the log exist? " + logExists.ToString());
ソースの存在を確認するには
コード エディタで、VerifySource_Click プロシージャを探します。
指定されたソースが存在するかどうかを評価して true または false を表示するメッセージ ボックスを作成します。次のコードを使用します。
Dim sourceExists As Boolean = EventLog.SourceExists("Source1") MessageBox.Show("Does the source exist? " + sourceExists.ToString())
bool sourceExists = System.Diagnostics.EventLog.SourceExists("Source1"); MessageBox.Show("Does the source exist? " + sourceExists.ToString());
ソースの削除
ここでは、ソース文字列を削除するコードを記述します。そのためには、指定されたソース (Source1) が存在することを確認してから、DeleteEventSource メソッドを呼び出してソースを削除します。
作成したイベント ソースを削除するには
コード エディタで、RemoveSource_Click プロシージャを探します。
次のコードを追加します。
If EventLog.SourceExists("Source1") Then EventLog.DeleteEventSource("Source1") End If
if (System.Diagnostics.EventLog.SourceExists("Source1")) { System.Diagnostics.EventLog.DeleteEventSource("Source1"); }
エントリの読み取り
ここでは、イベント ログのエントリ コレクション内で反復処理してログ内の既存のメッセージを表示するコードを記述します。
作成したカスタム ログからエントリを読み取るには
コード エディタで、ReadEntry_Click プロシージャを探します。
次のコードを追加します。
Dim entry As EventLogEntry If EventLog1.Entries.Count > 0 Then For Each entry In EventLog1.Entries System.Windows.Forms.MessageBox.Show(entry.Message) Next Else MessageBox.Show("There are no entries in the log.") End If
if (eventLog1.Entries.Count > 0) { foreach (System.Diagnostics.EventLogEntry entry in eventLog1.Entries) { MessageBox.Show(entry.Message); } } else { MessageBox.Show("There are no entries in the log."); }
コードのテスト
このセクションでは、サーバー エクスプローラを使用してコードの結果を検査します。
サーバー エクスプローラを起動するには
[表示] メニューの [サーバー エクスプローラ] をクリックします。
現在のサーバーのノードを展開し、その下の [イベント ログ] ノードを展開します。
アプリケーションをビルドして実行するには
ファイルを保存し、F5 キーを押してプロジェクトをビルドおよび起動します。作成した 8 個のボタンを持つフォームが表示されます。
[Create Custom Log] をクリックします。
メモ : Windows イベント ログを作成するには、アプリケーションが動作するサーバーに対して適切なアクセス許可を持っている必要があります。この時点でセキュリティ エラーが発生する場合は、システム管理者に相談してください。
実行モードのまま製品に戻り、サーバー エクスプローラ で [イベント ログ] ノードを右クリックします。
[最新の情報に更新] をクリックします。
[イベント ログ] ノードに NewLog1 ログが表示されることを確認します。
カスタム ログの作成、削除、および確認をテストするには
実行中のフォームに戻り、[Verify Log Exists] をクリックします。
テキストが "True" に設定されたプロンプトが表示されます。
[Delete Log] をクリックし、[Verify Log Exists] をもう一度クリックします。
今度は、プロンプトに "False" と表示されます。
[Create Custom Log] をもう一度クリックしてログを再作成します。
カスタム ログへのエントリの書き込みとカスタム ログからのエントリの読み取りをテストするには
フォームの [Write Entry] をクリックします。
サーバー エクスプローラ を表示し、NewLog1 ログを展開します。
その下にある Source1 ノードを展開します。
ログに 2 つのエントリが追加されています。1 つのエントリには情報エントリであることを示すアイコンが表示され、もう 1 つのエントリにはエラーであることを示すアイコンが表示されています。
フォームに戻り、[Read Entry] をクリックします。
2 つのプロンプトが表示されます。情報エントリを含むプロンプトとエラー エントリを含むプロンプトです。
メモ : [Write Entry] を複数回クリックした場合は、さらに多くのプロンプトが表示されます。
ログの消去をテストするには
フォームの [Clear Log] をクリックします。
サーバー エクスプローラ で、[NewLog1] ノードを右クリックし、[最新の情報に更新] をクリックします。
ログにエントリが含まれていない状態になります。
ソース文字列の削除をテストするには
フォームの [Remove Event Source] をクリックします。
[Verify Source Exists] をクリックします。"False" というメッセージが表示され、ソース Source1 がもう存在しないことを示します。
[Write Entry] をクリックします。
メモ : WriteEntry メソッドは、ソースが存在しない場合にはソースを設定するため、ソースがない状態でもログにエントリを書き込むことができます。
サーバー エクスプローラ で、[NewLog1] ノードを右クリックし、[最新の情報に更新] をクリックします。ログに 2 つのエントリが表示されます。
[Verify Source Exists] をもう一度クリックします。"True" というメッセージが表示され、ソース Source1 が存在することを示します。
テストが終了したら、[DeleteLog] をクリックできます。これにより、ログ NewLog1 とソース Source1 が削除されるため、システムの構成に永続的な変更は行われていないことになります。