1

我在 SSIS 包中启用了文件日志记录,对于日志文件连接字符串,我使用下面的表达式生成格式为housekeepinglog2013_01_31_12_07.xml

@[User::VAR_LOG_PATH] +"\\housekeepinglog" + 
(DATEDIFF( "dd", @[System::StartTime], GETDATE() ) < 1 ?
(DT_STR,4,1252)DATEPART( "yyyy" , @[System::StartTime]) +  "_" +
RIGHT("0" + (DT_STR,4,1252)DATEPART("mm", @[System::StartTime]), 2) + "_" +
RIGHT("0" + (DT_STR,4,1252)DATEPART("dd", @[System::StartTime]), 2) +  "_" +
RIGHT("0" + (DT_STR,4,1252)DATEPART("hh", @[System::StartTime]), 2) +  "_" +
RIGHT("0" + (DT_STR,4,1252)DATEPART("mi", @[System::StartTime]), 2) +  "_" +
RIGHT("0" + (DT_STR,4,1252)DATEPART("ss", @[System::StartTime]), 2)
: "") 
+ ".xml"

问题是我没有创建一个日志文件,而是得到了两个。一个包含正确的日期,另一个仅包含有关包验证的日志信息,但日期大约为一天。似乎 StartTime 系统变量会在包启动后设置,但这是在验证后完成的,并且验证正在创建日志条目。在此之前,StartDate 变量保存一些在编辑包时创建的任意日期。

这只是轻微的刺激,但我想知道是否有人知道抑制第二个日志文件的非笨拙方法。

4

1 回答 1

0

我猜“旧”的日志也有这个PackageStart事件,是吗?您在这里看到的内容与许多人尝试的努力有些相关,即在不修改包的情况下动态启用/禁用日志记录。他们遇到的挑战是基础 dtexec.exe 在您进入表达式开始验证的地方之前验证了包以及所有这些。

想到的两个选项是从命令行为您的连接字符串提供值。就像是dtexec /file .\mypackage.dtsx /set \Package.Connections[XmlLogCM].Properties[ConnectionString];\"c:\housekeepinglog_SomeDosSyntaxForDateTime.xml\"

第二个是以不同的方式启动包。通过使用Microsoft.SqlServer.Dts.Runtime的自定义 .NET 代码或下载并使用DTLoggedExec

于 2013-01-31T14:03:28.190 回答