EventLog を使用すると、重要なソフトウェア イベントまたはハードウェア イベントについての情報を記録する Windows のイベント ログへのアクセスやカスタマイズが可能になります。EventLog を使用して、既存のログからの読み取り、ログへのエントリの書き込み、イベント ソースの作成や削除、ログ エントリへの応答などを行うことができます。また、イベント ソースの作成時に新しいログを作成することもできます。
重要 : |
|---|
| EventLog オブジェクトを作成し、エントリを書き込んで、信頼性が一部しか確認されていないコードに EventLog オブジェクトを渡すと、セキュリティ上の問題が発生することがあります。信頼性の低いコードには、EventLogEntry オブジェクトや EventLogEntryCollection オブジェクトなどのイベント ログ オブジェクトを渡さないでください。 |
重要 : |
|---|
| NET Framework Version 1.0 および 1.1 では、このクラスは直接の呼び出し元に完全な信頼を要求します。Version 2.0 では、このクラスは EventLogPermission に特定のアクションを要求します。EventLogPermission で信頼性が一部しか確認されていないコードを許可しないようにすることをお勧めします。イベント ログの読み取りと書き込みを行う機能を利用して、別のアプリケーションの名前でイベント ログ メッセージを発行するなどのアクションを実行できます。 |
重要 : |
|---|
| イベント ソースを作成または削除する場合、名前付きミューテックスを使用して基になるコードを同期する必要があります。高度な特権が付与されたアプリケーションが名前付きミューテックスをロックしている場合、イベント ソースを作成または削除しようとすると、ロックが解除されるまでアプリケーションは応答を停止します。この問題を回避するために、信頼関係のないコードには UnmanagedCode アクセス許可を付与しないでください。また、UnmanagedCode アクセス許可を使用すると、他のアクセス許可をバイパスできる可能性もあるため、信頼度の高いコードにだけこのアクセス許可を付与する必要があります。 |
ログを読み取るには、EventLog に Log 名と MachineName (サーバー コンピュータ名) を指定します。ソースが必要なのはログに書き込む場合だけであるため、Source を指定する必要はありません。Entries メンバには、自動的にイベント ログのエントリ リストが設定されます。
メモ |
|---|
| Log/MachineName のペアを指定してログに接続している場合は、MachineName を指定する必要はありません。MachineName を指定しなかった場合は、ローカル コンピュータ "." が想定されます。 |
イベント ログに書き込む場合は、イベント Source を指定するか、または作成する必要があります。新しいイベント ソースを作成するには、コンピュータの管理者権限が必要です。Source は、アプリケーションを有効なソースとしてイベント ログに登録します。Source は、同時に 1 つのログに書き込むときだけ使用できます。Source には任意のランダムな文字列を指定できますが、コンピュータの他のソースとは別の一意の名前である必要があります。通常、ソース名には、アプリケーション名またはその他の識別用文字列を使用します。重複する Source 値を作成しようとすると、例外がスローされます。ただし、単一のイベント ログを複数のソースに関連付けることは可能です。
メモ |
|---|
| アプリケーションは、あらゆる登録済みのソース名で書き込みを行うことが可能で、これを防ぐ手段はありません。アプリケーションに Write アクセス許可が与えられている場合、コンピュータに登録されている有効なソースすべてに関するイベントを書き込むことができます。 |
アプリケーションおよびサービスは、アプリケーション ログまたはカスタム ログに書き込みます。デバイス ドライバは、システム ログに書き込みます。Log プロパティを明示的に設定しない場合、イベント ログは既定のアプリケーション ログに設定されます。
メモ |
|---|
| セキュリティ ログは読み取り専用です。 |
イベントをイベント ログに書き込むには、WriteEvent と WriteEntry を使用します。イベントを書き込むには、イベント ソースを指定することが必要です。イベント ソースは、そのソースを持つ最初のエントリを書き込む前に作成および構成しておく必要があります。
アプリケーションのインストール時に新しいイベント ソースを作成します。これにより、オペレーティング システムが、登録されたイベント ソースとその構成の一覧を更新するだけの時間的余裕が生まれます。イベント ソースの一覧がオペレーティング システムにより更新されていないとき、新しいソースでイベントを書き込もうとすると、書き込み操作が失敗します。新しいソースは、EventLogInstaller または CreateEventSource メソッドを使用して構成できます。新しいイベント ソースを作成するには、コンピュータの管理者権限が必要です。
各ソースは同時に 1 つのログだけに登録できます。ただし、アプリケーションでは、複数のイベント ログに書き込むために複数のソースが使用される場合があります。たとえば、アプリケーションには、異なるイベント ログまたは異なるリソース ファイル用に構成された複数のソースが必要になる場合があります。既存のソースの構成情報を変更するには、一度ソースを削除してから、新しい構成で作成し直す必要があります。他のアプリケーションまたはコンポーネントが既存のソースを使用している場合、既存のソースを削除するのではなく、更新された構成で新しいソースを作成します。
イベント カテゴリおよびメッセージ文字列用のローカライズされたリソースを持つイベント ソースを登録できます。アプリケーションは、実際の文字列値を指定するのではなく、リソース識別子を使用してイベント ログ エントリを書き込むことができます。リソース ファイルを使用したソースの構成については、EventLogInstaller クラスおよび EventSourceCreationData クラスのトピックを参照してください。
アプリケーションが文字列値をイベント ログに直接書き込む場合は、ソースにリソース ファイルのプロパティを設定する必要はありません。ソースは、ローカライズされたエントリを書き込むか、または直接の文字列を書き込むように構成されている必要があります。アプリケーションがリソース識別子と文字列値の両方を使用してエントリを書き込む場合、2 つの異なるソースを登録する必要があります。たとえば、複数のリソース ファイルを持つ 1 つのソースを構成してから、WriteEvent メソッドでこのソースを使用し、リソース識別子によってエントリをイベント ログに書き込みます。次に、リソース ファイルを使わずに作成した別のソースを WriteEntry メソッドで使用し、そのソースを使って文字列を直接イベント ログに書き込みます。
イベントを書き込む場合は、少なくともメッセージ文字列またはメッセージ文字列のリソース識別子を指定する必要があります。他のイベント プロパティは省略可能です。省略可能なイベント設定の例を次に示します。EventLogEntryType を設定して、イベント ビューアがエントリに表示するアイコンを指定できます。アプリケーションがイベントのフィルタにカテゴリを使用する場合は、イベントのカテゴリ識別子を指定できます。追加情報を指定したイベントに関連付ける必要がある場合は、イベント エントリにバイナリ データを追加できます。
EventLog クラスは、個別のイベント ログとそのエントリへのアクセスを提供するだけではなく、すべてのイベント ログのコレクションへのアクセスも提供します。EventLog のstatic メンバを使用すると、ログの削除、ログ リストの取得、ソースの作成または削除、特定のソースがコンピュータに既に存在するかどうかの確認などを行うことができます。
アプリケーション ログ、システム ログ、セキュリティ ログの 3 つの既定のイベント ログがあります。Active Directory など、インストールされた他のアプリケーションやサービスでは追加のイベント ログを使用できます。EventLog を使用してカスタム イベント ログを作成できます。カスタム イベント ログはサーバーのイベント ビューアで表示できます。イベント ビューアにイベント ログのローカライズされた名前を表示させるには、RegisterDisplayName メソッドを使用します。最大ログ サイズに達した場合のイベント ログの動作を構成するには、ModifyOverflowPolicy メソッドを使用します。
イベントのログはディスク容量やプロセッサ時間、その他のシステム リソースを消費します。このため、必要な情報だけをログすることが重要です。パフォーマンスの低下を避けるために、イベント ログの呼び出しはメインのコード パスではなくエラー パスに配置することをお勧めします。
EventLog のインスタンスの初期プロパティ値の一覧については、EventLog コンストラクタのトピックを参照してください。
Windows 98, Windows Millennium Edition プラットフォームメモ :
イベント ログは、Windows 98 または Windows Millennium Edition (Me) ではサポートされていません。