注
この記事は、.NET でホストされているサービスには適用されません。 Microsoft.Extensions.Hosting.BackgroundServiceと Worker Service テンプレートを使用した Windows サービスの最新のコンテンツについては、次を参照してください。
既定では、すべての Windows サービス プロジェクトでアプリケーション イベント ログを操作し、情報と例外を書き込む機能があります。 AutoLog プロパティを使用して、アプリケーションでこの機能が必要かどうかを示します。 既定では、Windows サービス プロジェクト テンプレートを使用して作成するすべてのサービスに対してログ記録が有効になります。 EventLog クラスの静的形式を使用すると、EventLog コンポーネントのインスタンスを作成したり、ソースを手動で登録したりする必要なく、サービス情報をログに書き込むことができます。
サービスのインストーラーは、ログ記録が有効になっているときに、サービスがインストールされているコンピューター上のアプリケーション ログを使用して、プロジェクト内の各サービスをイベントの有効なソースとして自動的に登録します。 サービスは、サービスが開始、停止、一時停止、再開、インストール、またはアンインストールされるたびに情報をログに記録します。 また、発生したエラーもログに記録します。 既定の動作を使用する場合は、ログにエントリを書き込むコードを記述する必要はありません。サービスはこれを自動的に処理します。
アプリケーション ログ以外のイベント ログに書き込む場合は、 AutoLog プロパティを falseに設定し、サービス コード内に独自のカスタム イベント ログを作成し、そのログのエントリの有効なソースとしてサービスを登録する必要があります。 その後、関心のあるアクションが発生するたびに、ログにエントリを記録するコードを記述する必要があります。
注
カスタム イベント ログを使用し、それに書き込むサービス アプリケーションを構成する場合は、コードでサービスの ServiceName プロパティを設定する前に、イベント ログへのアクセスを試みてはなりません。 イベント ログには、サービスをイベントの有効なソースとして登録するために、このプロパティの値が必要です。
サービスの既定のイベント ログを有効にするには
コンポーネントの AutoLog プロパティを
trueに設定します。注
既定では、このプロパティは
trueに設定されています。 条件を評価し、その条件の結果に基づいて AutoLog プロパティを設定するなど、より複雑な処理を構築する場合を除き、これを明示的に設定する必要はありません。
サービスのイベント ログを無効にするには
コンポーネントの AutoLog プロパティを
falseに設定します。AutoLog = false;Me.AutoLog = False
カスタム ログへのログ記録を設定するには
AutoLog プロパティを
falseに設定します。注
カスタム ログを使用するには、 AutoLog を false に設定する必要があります。
Windows サービス アプリケーションで EventLog コンポーネントのインスタンスを設定します。
CreateEventSource メソッドを呼び出し、作成するソース文字列とログ ファイルの名前を指定して、カスタム ログを作成します。
Source コンポーネント インスタンスの EventLog プロパティを、手順 3 で作成したソース文字列に設定します。
WriteEntry コンポーネント インスタンスの EventLog メソッドにアクセスしてエントリを書き込みます。
次のコードは、カスタム ログへのログ記録を設定する方法を示しています。
注
このコード例では、 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 Subprotected 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