SSIS学习使用十一:日志(Logging)

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

翻译参考

本文主要参考翻译自 The Stairway to Integration Services 系列文章的 Logging – Level 11 of the Stairway to Integration Services,目的在于对 SSIS 有一个全面清晰的认识,所有内容在原文的基础上进行实操,由于版本差异、个人疑问等多种原因,未采用完全翻译的原则,同时也会对文中内容进行适当修改,希望最终可以更有利于学习和了解 SSIS,

感谢支持!


本篇中,我们将配置SSIS的内置日志记录。演示简单和高级的日志配置,存储和检索日志配置以及生成自定义日志消息。

事件侦听器(Event Listeners)

SSIS中的任务和容器都是可执行文件,包括SSIS包对象。可行性文件引起事件。SSIS事件处理程序是"侦听器",当任务和容器引发事件时它对事件进行响应。

可以认为 SSIS事件 是在可执行文件之间发送的消息。这个消息根据一定规则传输,比如:消息从低水平作用域流到高水平作用域。

SSIS中的日志(logs)也是侦听器。

配置SSIS日志

将上一篇最后设置的 Sequence.dtsxDisableEventHandlers 属性还原为默认值False

点击顶部的SSIS下拉菜单,点击选中"日志记录"(Logging)。

2021-02-05-09-12-33.png

打开 配置SSIS日志窗口(Configure SSIS Logs window)

可用的日志提供程序的类型是:

  • Windows Event Log —— Windows事件日志
  • Text Files —— 文本文件
  • XML Files —— XML文件
  • SQL Server
  • SQL Server Profiler

2021-02-05-09-18-38.png

选择文本文件提供程序。然后点击 "添加"(Add) 按钮,添加一个文件文件记录 "Precedence.dtsx" 包的日志。

2021-02-05-09-24-08.png

可以在底部看到重要的提示信息。如上图,它指示我们下一步要做什么。

我们需要在左侧的容器树视图中,选择复选框启用日志记录。如下,为 "Precedence" 包启用日志记录。

2021-02-05-09-26-58.png

现在来配置日志自身。首先我们需要分配日志给在容器树视图选择的包。通过选中日志的复选框分配日志。

2021-02-05-09-33-06.png

后面,还可以编辑日志的 "名称"(Name) 和 "描述"(Description) 属性。点击 "配置"(Configuration) 列单元格中的下拉菜单,并点击"<新建连接>"。

一个新的 文件连接管理器 在 连接管理器 中被创建,文件连接管理器编辑器 被打开。它可以用来配置文本文件日志使用的文件。在使用类型中选择"创建文件"(Create file):日志文件不会在SSIS包每次执行时创建,而是如果不存在则被创建;如果日志文件存在,日志数据会追加进去。

2021-02-05-09-54-47.png

点击文件右侧的 "浏览"(Browse),选择日志所在文件夹,然后下方输入文件名。如下所示:

2021-02-05-09-58-53.png

点击"确定",完成文件连接管理器的配置。

我们已经为 "Precedence.dtsx" 包配置了一个文本文件日志。执行该SSIS包,然后打开 SSISLog.csv 文件查看。

记住,SSIS日志是监听事件的侦听器。默认的日志侦听器,监听 包开始(PackageStart) 和 包结束(PackageEnd) 事件。

2021-02-05-10-07-52.png

添加事件

点击顶部的 SSIS下拉菜单 并点击"日志记录"(Logging),打开配置SSIS日志窗口。

点击"详细信息"标签页。此处列出了所有可执行文件引发事件的事件列表。即侦听器(SSIS事件处理程序和SSIS日志)访问SSIS包中可执行文件事件的集合。

如果在SSIS控制流中添加不同任务,我们将会在该列表和事件处理程序列表中看到额外的事件。

选择 "OnError" 和 "OnInformation" 事件。

2021-02-05-10-16-10.png

执行 "Precedence.dtsx" 包,然后打开 SSISLog.csv 文件查看。可以看到其内容记录增加了按事件冒泡依次发生的错误事件。

高级日志配置

高级配置

打开 "Precedence.dtsx" 包的 配置SSIS日志窗口,打开"详细"标签页,在底部有三个按钮:"高级"(Advanced)、"加载"(Load)和"保存"(Save)。

  • "高级"

点击"高级"按钮,显示可用于配置的SSIS日志字段。如下,之前我们选择的 "OnError" 和 "OnInformation" 事件选择了所有字段。

2021-02-05-10-32-31.png

然后修改如下,"OnError"事件不选择"ExecutionID"、"DataBytes"列,"OnInformation"事件不选择"ExecutionID"、"SourceID"列。最后高级日志配置表格应该类似下图:

2021-02-05-10-40-28.png

  • "保存"

然后点击"保存"(Save)。当保存对话框显示时,在文件名文本框输入 "MyLogConfig"。

2021-02-05-10-43-12.png

点击保存按钮,存储SSIS当前的日志配置到一个XML文件。

  • xml配置文件的作用 —— 加载重用已有的日志配置

下面演示下xml配置文件的作用。清空高级日志配置表格,类似如下。

2021-02-05-10-47-15.png

点击"加载"(Load)按钮,打开对话框显示后选择"MyLogConfig"文件,点击"打开"按钮:

2021-02-05-10-48-53.png

可以看到,高级日志配置表格返回到了保存的选择。你可以使用此功能,鼓励企业中的开发人员从SSIS的内置日志记录中收集类似的日志记录字段。

点击"确定",关闭配置SSIS日志窗口。

根据需要引发自定义事件

有相当多的日志消息由 SSIS 自动生成。但是也可以手动引发事件并被日志监听到,实现生成自定义日志消息。

打开 "Script Task 3" 的编辑器,点击"编辑脚本"按钮。修改Main函数内容如下:

public void Main()
{
    // TODO: Add your code here
    var sTaskName = Dts.Variables["TaskName"].Value.ToString();
    var sMsg = sTaskName + " completed!";
    var fireAgain = true;
    Dts.Events.FireInformation(101, sTaskName, sMsg, "", 0, ref fireAgain);
    MessageBox.Show(sMsg);
    Dts.TaskResult = (int)ScriptResults.Success;
}
复制代码

首先添加一个变量"sMsg",分配值为sTaskName + " completed!"。然后添加代码手动引发 Information 事件:Dts.Events.FireInformation(101, sTaskName, sMsg, "", 0, ref fireAgain)

Dts.Events对象可以引发许多不同类型的事件,包括我们当前在日志配置中监听的 Error 和 Information 事件。

"FireInformation"方法有6个参数:informationCode (Integer), subComponent (String), description (String), helpFile (String), helpContext (Integer) 和 fireAgain (Boolean)。InformationCode可用于对消息进行分类。使用subComponent来标识引发事件的任务。description是想要记录的消息。 HelpFile 和 helpContext 用于将消息链接到帮助相关的话题。暂时从未配置过这些话题,不确定它们是如何(或是否)工作的。FireAgain已过时 —— 默认将其设置为True。

关闭脚本编辑器,然后点击"确定",关闭 Script Task Editor

在调试器中执行 "Precedence" 包,Script Task 2成功,Script Task 4失败。并确认"Script Task 3"的完成消息。

打开日志文件检查最新的消息记录。

"OnInformation" 事件同样是冒泡传递消息。从 Script Task 3 开始,到 “序列容器1”,再到 Precedence.dtsx SSIS包。

类似于Information事件,我们也可以引发自定义Error事件。

打开"Script Task 4"的编辑器并点击编辑脚本按钮。可以看到使用 "Dts.Events.FireError" 方法引发的自定义Error事件的代码。

总结

在本文中,我们配置了SSIS的内置日志记录,展示了简单和高级的日志配置,存储和获取日志配置,以及使用脚本任务,通过 C# 生成自定义日志消息。

おすすめ

転載: juejin.im/post/7031755763454492686