da@[User::Log_path] + @[System::PackageName] + " " + SUBSTRING( (DT_WSTR,29) GETDATE(),1,10)
+ " "+
((LEN((DT_WSTR, 2) DATEPART("Hh", GETDATE()))>1)?
(DT_WSTR, 2) DATEPART( "Hh", GETDATE() ) : "0" +(DT_WSTR, 2) DATEPART( "Hh", GETDATE() )) + "h "+
((LEN((DT_WSTR, 2)DATEPART( "mi", GETDATE()))>1)?
(DT_WSTR, 2) DATEPART( "mi", GETDATE() ) :"0" + (DT_WSTR, 2) DATEPART( "mi", GETDATE() )) + "m " +
((LEN((DT_WSTR, 2)DATEPART( "ss", GETDATE()))>1)?
(DT_WSTR, 2) DATEPART( "ss", GETDATE() ) :"0" + (DT_WSTR, 2) DATEPART( "ss", GETDATE() )) + "s " +
SUBSTRING(@[System::UserName],5,100) +".txt"
我在Property Expression Editor中使用了上述内容。在执行包时,它会创建三个日志文件:一个包含整个信息,另外两个只包含标题。有时,所有三个都包含日志详细信息。相当困惑,发生了什么。
答案 0 :(得分:3)
如果我是一个猜测人,我的赌注是在执行包时会多次评估GETDATE。我对您的代码的阅读说明您正在构建基于包名称,日期和小时/分钟/秒的路径。每次调用GETDATE时,它都会返回当前值。而不是使用GETDATE,我认为你真正想要的是当包启动时的当前时间。您可以通过检查日志文件的内容来推断其余的时序信息。
如果是这种情况,简单的解决方法是将所有GETDATE()
替换为系统变量StartTime,@[System::StartTime]
答案 1 :(得分:0)
我对此感到很疯狂。我能够根据billinkc的建议让System StartTime工作。
我想知道它是否依赖于字符串中的变量数量。
这是我最终做的事情。对于我的日志文件连接管理器,我使用的是一个用户变量的表达式。在我的名为logFileName的用户变量中,它是以下表达式。你可以看到我只在这里调用一个变量。也许如果你使用多个彼此构建的变量,它只会创建一个文件?
我希望这会有所帮助。
"\\\\hard-coded-server-name\\Interfaces\\DailyLogFiles\\logoutput_" +
REPLACE(REPLACE( (DT_STR,256,1252) @[System::StartTime], "/", "_"),
":", "_") +".txt"
为了提供更多信息,我想根据服务器名称更改路径,但我从来没有让它变得动态,尝试使用MachineName没有运气。
祝你好运。