将信息写入应用程序日志

可以在 Microsoft SQL Server Integration Services (SSIS) 包中包含脚本任务以运行任务。 例如,任务可能会将变量信息集合写入 Windows 应用程序日志。 可以创建包含数据流任务的 SSIS 包。 此数据流任务包括行计数转换。 可以使用脚本任务将行计数转换填充的数据写入 Windows 应用程序日志。

本文介绍如何使用脚本任务将信息写入 Windows 应用程序日志。

原始产品版本:SQL Server
原始 KB 编号:906560

说明

此示例假定你在 SSIS 包中创建了以下元素:

  • 数据流任务。
  • 脚本任务。
  • 从数据流任务到脚本任务的连接器。
  • 在数据流任务中,你在数据流中创建了行计数转换。

运行包时,行计数转换将返回要写入 Windows 应用程序日志的行计数数据。

配置脚本任务

若要配置脚本任务代码示例,请在 SSIS 设计器中执行以下步骤:

  1. 当“控制流”选项卡处于活动状态时,右键单击设计图面,然后选择“变量”。 左侧窗格将显示“变量”窗口。

  2. 在“变量”窗口中,选择“添加变量”,然后将变量名称作为 mycount 提供。 默认情况下,新 mycount 变量的数据类型为 Int32

    注意

    对变量名称的引用区分大小写。

  3. 双击“数据流任务”。 活动窗口切换到“数据流”选项卡。

  4. 使用行计数转换的属性将 VariableName 属性值设置为 mycount。

  5. 选择“控制流”选项卡,然后双击“脚本任务”。 此时会显示“脚本任务编辑器”对话框。

  6. 在左窗格中,选择“脚本”项,然后将 ReadOnlyVariables 属性值更改为以下值:

    PackageName,StartTime,ExecutionInstanceGUID,mycount

    注意

    PackageName、StartTime 和 ExecutionInstanceGUID 项是系统变量。 这些系统变量用于将包信息写入 Windows 应用程序日志。

  7. 在“脚本任务编辑器”对话框中,选择“编辑脚本”。

  8. 当出现新的 Microsoft Visual Studio for Applications (VSTA) 窗口时,请执行以下步骤:

    1. 请确保在任何其他声明之前,代码中包含以下命名空间。

      Imports System 
      Imports System.Data
      Imports System.Math
      Imports System.Diagnostics
      Imports Microsoft.SqlServer.Dts.Runtime
      
    2. 将以下代码示例替换为 Main() 方法中的代码。

      Dim varMyCount As Variable = Dts.Variables("mycount") '
      Dim varPackageName As Variable = Dts.Variables("PackageName")
      Dim varStartTime As Variable = Dts.Variables("StartTime")
      Dim varInstanceID As Variable = Dts.Variables("ExecutionInstanceGUID")
      Dim PackageDuration As Long
      '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      ' Event log needs
      '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      Dim sSource As String
      Dim sLog As String
      Dim sEventMessage As String
      Dim sMachine As String
      '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
      PackageDuration = DateDiff("s", varStartTime.Value, Now())
      sSource = "RowCountReporting from SSIS"
      ' We need the message posted to the Application event log.
      sLog = "Application"
      sEventMessage = "Rows Processed: " & Chr(10) _
      & " case Rows:" + varMyCount.Value().ToString + Chr(10) _
      & "=============================================" & Chr(10) _
      & "The Package: " + varPackageName.Value().ToString _
      & Chr(10) _
      & "Started: " & varStartTime.Value().ToString _
      & Chr(10) _
      & "Current Time:" & System.DateTime.Now _
      & Chr(10) _
      & "=============================================" _
      & Chr(10) _
      & "Package Run Duration in seconds: " & PackageDuration _
      & Chr(10) _
      & "Execution GUID: " & varInstanceID.Value().ToString
      sMachine = "."
      If Not EventLog.SourceExists(sSource, sMachine) Then
      EventLog.CreateEventSource(sSource, slog)
      End If
      Dim ELog As New EventLog(sLog, sMachine, sSource)
      Dim category As Short = 2
      ' ELog.WriteEntry("Write from third source", 4, 777, 2)
      ELog.WriteEntry(sEventMessage, EventLogEntryType.Information, 777, category)
      '###############################
      Dts.TaskResult = ScriptResults.Success
      

    包成功运行后,Windows 应用程序日志中会显示以下条目。

       Log Name: Application
       Source: RowCountReporting from SSIS
       Date: 12/20/2022 11:21:38 AM
       Event ID: 777
       Task Category: (2)
       Level: Information
       Keywords: Classic
       User: N/A
       Computer: <hostname>
       Description:
       Rows Processed:
       case Rows:0
       =============================================
       The Package: Package
       Started: 12/20/2022 11:21:37 AM
       Current Time:12/20/2022 11:21:38 AM
       =============================================
       Package Run Duration in seconds: 1
       Execution GUID: {9DF22831-E608-47F7-BD62-F9BD3C2F9C77}
       Event Xml:
       <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
       <System>
       <Provider Name="RowCountReporting from SSIS" />
       <EventID Qualifiers="0">777</EventID>
       <Version>0</Version>
       <Level>4</Level>
       <Task>2</Task>
       <Opcode>0</Opcode>
       <Keywords>0x80000000000000</Keywords>
       <TimeCreated SystemTime="2022-12-20T17:21:38.5070621Z" />
       <EventRecordID>122603</EventRecordID>
       <Correlation />
       <Execution ProcessID="41588" ThreadID="0" />
       <Channel>Application</Channel>
       <Computer><hostname>/Computer>
       <Security />
       </System>
       <EventData>
       <Data>Rows Processed:
       case Rows:0
       =============================================
       The Package: Package
       Started: 12/20/2022 11:21:37 AM
       Current Time:12/20/2022 11:21:38 AM
       =============================================
       Package Run Duration in seconds: 1
       Execution GUID: {9DF22831-E608-47F7-BD62-F9BD3C2F9C77}</Data>
       </EventData>
       </Event>
    

参考

EventLog.WriteEntry 方法 (System.Diagnostics)

检测代码以创建 EventSource 事件