如何:记录关于服务的信息

注意

本文不适用于 .NET 中的托管服务。 有关使用 Microsoft.Extensions.Hosting.BackgroundService 的 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
    

请参阅