方法 : サービスに関する情報のログを記録する
既定では、すべての Windows サービス プロジェクトは、Application イベント ログにアクセスして、情報と例外を書き込むことができるように設定されます。 アプリケーションにこの機能を指定するには、AutoLog プロパティを使用します。 既定では、Windows サービス プロジェクトのテンプレートで作成するすべてのサービスには、ロギング機能が設定されます。 EventLog クラスの静的なフォームを使用して、サービスの情報をログに記録できます。EventLog コンポーネントのインスタンスを作成したり、手動でソースを登録する必要はありません。
ロギングが設定されている場合、サービスのインストーラーは、プロジェクトの各サービスを有効なイベント ソースとして、インストール先コンピューターの Application ログに自動的に登録します。 サービスが情報を記録するのは、サービスの開始、停止、一時停止、再開、インストール、またはアンインストールが行われたときです。 エラーが発生した場合は、エラーも記録します。 既定の動作で実行する場合は、ログにエントリを記録するためのコードを記述する必要はありません。サービスが自動的に記録します。
Application ログ以外のイベント ログに記録する場合は、AutoLog プロパティに false を設定し、サービスのコードで独自のイベントログを作成し、そのログに記録するエントリの有効なソースとしてサービスを登録します。 次に、記録対象のアクションが発生したときにログにエントリを記録するコードを記述する必要があります。
注意
カスタム イベント ログを用意し、そこにロギングを行うようにサービス アプリケーションを設定する場合は、コードでサービスの ServiceName プロパティを設定するまで、カスタム イベント ログにアクセスしないでください。 サービスを有効なイベント ソースとして登録するには、イベント ログにこのプロパティの値が必要です。
サービスの既定のイベント ロギングを有効にするには
コンポーネントの AutoLog プロパティに true を設定します。
注意
既定では、このプロパティは true に設定されます。 通常、このプロパティを明示的に設定する必要はありません。明示的な設定が必要なのは、条件分岐などの複雑な処理を作成し、条件の判定結果に基づいて AutoLog プロパティを設定するときだけです。
サービスのイベント ロギングを無効にするには
コンポーネントの AutoLog プロパティに false を設定します。
Me.AutoLog = False
this.AutoLog = false;
カスタム ログへのロギングを設定するには
AutoLog プロパティを false に設定します。
注意
カスタム ログを使用するには、AutoLog を false に設定する必要があります。
Windows サービス アプリケーションの EventLog コンポーネントのインスタンスを設定します。
CreateEventSource メソッドを呼び出してカスタム ログを作成し、ソースの文字列および作成するログ ファイルの名前を指定します。
EventLog コンポーネント インスタンスの Source プロパティに、手順 3 で作成したソース文字列を設定します。
EventLog コンポーネント インスタンスの WriteEntry メソッドにアクセスして、エントリを記録します。
カスタム ログへのロギングの設定例を次のコードに示します。
注意
このコード例では、EventLog コンポーネントのインスタンスの名前は eventLog1 (Visual Basic では EventLog1) です。 手順 2. で別の名前のインスタンスを作成した場合は、それに応じてコードを変更してください。
Public Sub New() ' Turn off autologging Me.AutoLog = False ' Create a new event source and specify a log name that ' does not exist to create a custom log If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyLog") End If ' Configure the event log instance to use this source name EventLog1.Source = "MySource" End Sub ... Protected Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub
public UserService2() { // Turn off autologging this.AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyLog"); } // configure the event log instance to use this source name eventLog1.Source = "MySource"; } ... protected override void OnStart(string[] args) { // write an entry to the log eventLog1.WriteEntry("In OnStart."); }