我在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变量包含编辑包时创建的任意日期。
这只是一个小小的烦恼,但我想知道是否有人知道一种非笨重的方式来压制第二个日志文件。
答案 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