如何为SSIS循环中的VB脚本生成执行日志文件?
给SSIS VB脚本添加日志记录的实现方案
直接修改原有脚本,加入日志写入逻辑并捕获异常,把执行前的变量信息、错误详情都写入日志文件,方便排查问题。以下是完整代码:
Public Sub Main() Dim url, destination As String Dim logPath As String = "C:\SSIS_Logs\ReportDownloadLog.txt" ' 替换为你的日志存储路径 Dim logMessage As New StringBuilder() ' 记录执行时间和初始变量信息 logMessage.AppendLine("======================================") logMessage.AppendLine("执行时间: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")) logMessage.AppendLine("DestinationPath变量值: " + Dts.Variables("DestinationPath").Value.ToString()) logMessage.AppendLine("NomFichier变量值: " + Dts.Variables("NomFichier").Value.ToString()) logMessage.AppendLine("CodeAffilie变量值: " + Dts.Variables("CodeAffilie").Value.ToString()) logMessage.AppendLine("NumeroMouvement变量值: " + Dts.Variables("NumeroMouvement").Value.ToString()) Try ' 原有业务逻辑 destination = Dts.Variables("DestinationPath").Value.ToString() + Dts.Variables("NomFichier").Value.ToString() url = "http://XXXXXX/ReportServer_RS/Pages/ReportViewer.aspx?XXXXXX&rs:Command=Render&P_CodeAffilie=" + Dts.Variables("CodeAffilie").Value.ToString() + "&P_NumeroMouvement=" + Dts.Variables("NumeroMouvement").Value.ToString() + "&rs:Format=EXCEL" ' 记录生成的URL和目标路径 logMessage.AppendLine("生成的下载URL: " + url) logMessage.AppendLine("目标保存路径: " + destination) SaveFile(url, destination) logMessage.AppendLine("文件下载成功") Dts.TaskResult = ScriptResults.Success Catch ex As Exception ' 捕获异常并记录错误详情 logMessage.AppendLine("执行失败,错误信息: ") logMessage.AppendLine("错误类型: " + ex.GetType().Name) logMessage.AppendLine("错误描述: " + ex.Message) logMessage.AppendLine("调用栈: " + ex.StackTrace) Dts.TaskResult = ScriptResults.Failure Finally ' 确保日志写入,无论成功失败都执行 WriteLog(logMessage.ToString(), logPath) End Try End Sub ' 日志写入辅助方法 Private Sub WriteLog(message As String, logFilePath As String) ' 确保日志目录存在 Dim logDir As String = Path.GetDirectoryName(logFilePath) If Not Directory.Exists(logDir) Then Directory.CreateDirectory(logDir) End If ' 追加写入日志文件 File.AppendAllText(logFilePath, message + Environment.NewLine) End Sub ' 保留原有的SaveFile方法 Private Sub SaveFile(url As String, destination As String) ' 这里是你原有的文件下载逻辑,无需修改 End Sub
关键说明
- 日志路径配置:把
logPath变量改成你实际要存储日志的路径,确保SSIS执行账户有该目录的读写权限。 - 日志内容设计:记录了执行时间、所有用到的变量值、生成的URL、目标路径,成功/失败状态;异常时还会记录错误类型、描述和调用栈,能精准定位问题。
- 异常捕获:用
Try...Catch...Finally包裹业务逻辑,无论执行成功还是失败,都会把日志写入文件,避免日志丢失。 - 辅助方法:
WriteLog方法负责创建目录(如果不存在)和追加写入日志,确保日志能正常生成。
注意事项
- 确保SSIS执行账户对日志目录有读写权限,否则会出现日志写入失败的问题。
- 如果需要按日期拆分日志,可以修改
logPath,比如改成"C:\SSIS_Logs\ReportDownloadLog_" + DateTime.Now.ToString("yyyyMMdd") + ".txt",每天生成一个日志文件。 - 如果变量可能为空,建议在
ToString()前加空值判断,比如If Dts.Variables("DestinationPath").Value IsNot Nothing Then Dts.Variables("DestinationPath").Value.ToString() Else "空值",避免空引用异常。
内容的提问来源于stack exchange,提问作者Salah K.
相关产品推荐
相关产品推荐

