代码之家  ›  专栏  ›  技术社区  ›  Kobi

如何检索SSIS进程任务的标准输出和错误

  •  5
  • Kobi  · 技术社区  · 7 年前

    上下文: 我有一个SSIS包,它通过执行进程任务调用C#控制台应用程序。

    enter image description here

    C#程序使用 Console.Write("xxx"); Console.Error.Write("yyyy"); 来判断它是否正常工作。

    static void Main(string[] args)
            {
                try
                {
                    //do stuff
                    Console.Write("xxx");
                }
                catch (Exception e)
                {
                    Console.Error.Write("yyyy");
                }
            }
    

    我的问题: 如何在ssis中捕获流程任务的输出?

    我所尝试的:

    使用控制流中的局部变量在流程任务表达式中设置StandardOutputVariable和StandardErrorVariable。

    enter image description here

    当我定义字符串变量时,这两个变量在流程任务完成后都是空的。 定义对象变量时,我试图运行脚本任务并将值转换为字符串数组,但它引发了无效的转换异常。

    我错过了什么? 我无法修改真正的C#程序来更改其日志记录方式。

    1 回复  |  直到 4 年前
        1
  •  2
  •   Kobi    7 年前

    我自己通过实验找到了解决办法。

    好的,我缺少的是standardErrorVariable的表达式值是如何工作的。

    用变量填充standardErrorVariable表达式值时,行为为:

    use the value of @[User::l_output] as a variable name to use for standardOutput.

    它不是: use this variable to capture the output

    因此,我有两个解决方案来捕获流程的输出:

    1. 直接使用 @[User::l_output] 在流程任务配置中(不在espression选项卡中)
    2. 使用 @[用户::l\U输出] 变量,并将我的变量值设置为我之前声明的变量的其他名称。 enter image description here