次の方法で共有


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

この記事は、.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
    

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

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

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

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

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

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

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

こちらも参照ください