方法: サービスに関する情報のログを記録する

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
    

カスタム ログへのログ記録を設定するには

  1. AutoLog プロパティを falseに設定します。

    Note

    カスタム ログを使用するには、 AutoLog を false に設定する必要があります。

  2. Windows サービス アプリケーションに EventLog コンポーネントのインスタンスを設定します。

  3. CreateEventSource メソッドを呼び出し、作成するログ ファイルのソース文字列と名前を指定して、カスタム ログを作成します。

  4. Source コンポーネント インスタンスの EventLog プロパティを、手順 3 で作成したソース文字列に設定します。

  5. 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
    

関連項目