方法: サービスに関する情報のログを記録する
Note
この記事は、.NET のホステッド サービスには適用されません。 Microsoft.Extensions.Hosting.BackgroundService を使用した Windows サービスの最新のコンテンツと Worker サービス テンプレートについては、次を参照してください:
既定では、すべての Windows サービス プロジェクトはアプリケーション イベント ログとやり取りして、そこに情報および例外を書き込むことができます。 アプリケーションにこの機能が必要かどうかを指定するには、 AutoLog プロパティを使用します。 既定では、Windows サービス プロジェクト テンプレートで作成したサービスには、ログが有効にされます。 EventLog クラスの静的フォームを使用すると、 EventLog コンポーネントのインスタンスを作成したり、手動でソースを登録したりすることなく、ログにサービス情報を書き込むことができます。
ログが有効にされていると、サービスのインストーラーは自動的に、プロジェクトの各サービスを有効なイベント ソースとして、サービスのインストール先コンピューター上のアプリケーション ログに登録します。 サービスの起動時、停止時、一時停止時、再開時、インストール時、アンインストール時には常に、サービスが情報をログに記録します。 また、発生したすべてのエラーもログに記録します。 既定の動作を使用している場合、ログにエントリを書き込むためのコードを作成する必要はありません。これは、サービスが自動的に処理します。
アプリケーション ログ以外のイベント ログに書き込む必要がある場合は、 AutoLog プロパティを false
に設定し、サービス コード内に独自のカスタム イベント ログを作成して、そのログに有効なエントリのソースとしてサービスを登録します。 その後、対象の操作が行われるたびにログにエントリを記録するコードを作成する必要があります。
Note
カスタム イベント ログを使用して、そのログに書き込むようにサービス アプリケーションを構成する場合、コードでサービスの ServiceName プロパティを設定する前に、そのイベント ログにアクセスしようとしないでください。 サービスを有効なイベントのソースとして登録するには、イベント ログにこのプロパティの値が必要です。
サービスの既定のイベント ログを有効にするには
コンポーネントの AutoLog プロパティを
true
に設定します。Note
既定では、このプロパティは
true
に設定されています。 条件を評価してから、その条件の結果に基づいて AutoLog プロパティを設定するなどの複雑な処理を作成するのでない限り、このプロパティを明示的に設定する必要はありません。
サービスの既定のイベント ログを無効にするには
コンポーネントの AutoLog プロパティを
false
に設定します。AutoLog = false;
Me.AutoLog = False
カスタム ログへのログ記録を設定するには
AutoLog プロパティを
false
に設定します。Note
カスタム ログを使用するには、 AutoLog を false に設定する必要があります。
Windows サービス アプリケーションに EventLog コンポーネントのインスタンスを設定します。
CreateEventSource メソッドを呼び出し、作成するログ ファイルのソース文字列と名前を指定して、カスタム ログを作成します。
Source コンポーネント インスタンスの EventLog プロパティを、手順 3 で作成したソース文字列に設定します。
WriteEntry コンポーネント インスタンスで EventLog メソッドにアクセスして、エントリを作成します。
次のコードに、カスタム ログへのログ記録を設定する方法を示します。
Note
このコード例では、 EventLog コンポーネントのインスタンスに
eventLog1
という名前を付けています (Visual Basic ではEventLog1
)。 手順 2 で別の名前を持つインスタンスを作成した場合は、それに応じてコードを変更してください。public UserService2() { _eventLog1 = new EventLog(); // Turn off autologging AutoLog = false; // create an event source, specifying the name of a log that // does not currently exist to create a new, custom log if (!EventLog.SourceExists("MySource")) { EventLog.CreateEventSource( "MySource", "MyLog"); } // configure the event log instance to use this source name _eventLog1.Source = "MySource"; _eventLog1.Log = "MyLog"; }
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 override void OnStart(string[] args) { // write an entry to the log _eventLog1.WriteEntry("In OnStart."); }
Protected Overrides Sub OnStart(ByVal args() As String) ' Write an entry to the log you've created. EventLog1.WriteEntry("In Onstart.") End Sub
関連項目
.NET