SSIS - 使用StartDate创建动态命名的日志文件会生成两个日志文件

时间:2013-01-31 13:17:50

标签: ssis

我在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 System变量就会被设置,但这是在验证之后完成的,并且验证是在创建日志条目。在此之前,StartDate变量包含编辑包时创建的任意日期。

这只是一个小小的烦恼,但我想知道是否有人知道一种非笨重的方式来压制第二个日志文件。

1 个答案:

答案 0 :(得分:0)

我猜测“旧”的日志也有PackageStart事件,是吗?你在这里看到的与许多尝试的努力有些相关,那就是动态启用/禁用登录包而不修改它们。他们遇到的挑战是基础dtexec.exe在您进入表达式开始验证的地方之前获得验证的包以及所有这些。

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

这样的东西

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