这是我参与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.dtsx
的 DisableEventHandlers
属性还原为默认值False
点击顶部的SSIS下拉菜单,点击选中"日志记录"(Logging)。
打开 配置SSIS日志窗口(Configure SSIS Logs window
)
可用的日志提供程序的类型是:
- Windows Event Log —— Windows事件日志
- Text Files —— 文本文件
- XML Files —— XML文件
- SQL Server
- SQL Server Profiler
选择文本文件提供程序。然后点击 "添加"(Add) 按钮,添加一个文件文件记录 "Precedence.dtsx" 包的日志。
可以在底部看到重要的提示信息。如上图,它指示我们下一步要做什么。
我们需要在左侧的容器树视图中,选择复选框启用日志记录。如下,为 "Precedence" 包启用日志记录。
现在来配置日志自身。首先我们需要分配日志给在容器树视图选择的包。通过选中日志的复选框分配日志。
后面,还可以编辑日志的 "名称"(Name) 和 "描述"(Description) 属性。点击 "配置"(Configuration) 列单元格中的下拉菜单,并点击"<新建连接>"。
一个新的 文件连接管理器 在 连接管理器 中被创建,文件连接管理器编辑器 被打开。它可以用来配置文本文件日志使用的文件。在使用类型中选择"创建文件"(Create file):日志文件不会在SSIS包每次执行时创建,而是如果不存在则被创建;如果日志文件存在,日志数据会追加进去。
点击文件右侧的 "浏览"(Browse
),选择日志所在文件夹,然后下方输入文件名。如下所示:
点击"确定",完成文件连接管理器的配置。
我们已经为 "Precedence.dtsx" 包配置了一个文本文件日志。执行该SSIS包,然后打开 SSISLog.csv
文件查看。
记住,SSIS日志是监听事件的侦听器。默认的日志侦听器,监听 包开始(PackageStart
) 和 包结束(PackageEnd
) 事件。
添加事件
点击顶部的 SSIS下拉菜单 并点击"日志记录"(Logging),打开配置SSIS日志窗口。
点击"详细信息"标签页。此处列出了所有可执行文件引发事件的事件列表。即侦听器(SSIS事件处理程序和SSIS日志)访问SSIS包中可执行文件事件的集合。
如果在SSIS控制流中添加不同任务,我们将会在该列表和事件处理程序列表中看到额外的事件。
选择 "OnError" 和 "OnInformation" 事件。
执行 "Precedence.dtsx" 包,然后打开 SSISLog.csv
文件查看。可以看到其内容记录增加了按事件冒泡依次发生的错误事件。
高级日志配置
高级配置
打开 "Precedence.dtsx" 包的 配置SSIS日志窗口,打开"详细"标签页,在底部有三个按钮:"高级"(Advanced)、"加载"(Load)和"保存"(Save)。
- "高级"
点击"高级"按钮,显示可用于配置的SSIS日志字段。如下,之前我们选择的 "OnError" 和 "OnInformation" 事件选择了所有字段。
然后修改如下,"OnError"事件不选择"ExecutionID"、"DataBytes"列,"OnInformation"事件不选择"ExecutionID"、"SourceID"列。最后高级日志配置表格应该类似下图:
- "保存"
然后点击"保存"(Save)。当保存对话框显示时,在文件名文本框输入 "MyLogConfig"。
点击保存按钮,存储SSIS当前的日志配置到一个XML文件。
- xml配置文件的作用 —— 加载重用已有的日志配置
下面演示下xml配置文件的作用。清空高级日志配置表格,类似如下。
点击"加载"(Load)按钮,打开对话框显示后选择"MyLogConfig"文件,点击"打开"按钮:
可以看到,高级日志配置表格返回到了保存的选择。你可以使用此功能,鼓励企业中的开发人员从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#
生成自定义日志消息。