You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:25:56