如何记录托管脚本执行的控制台输出?

时间:2016-02-22 21:39:58

标签: c# scriptcs

我正在使用scriptcs.net来托管动态脚本,我想将Console.WriteLine()的输出捕获到我的日志中作为信息,并将Console.Error.WriteLine()作为错误捕获。与Octopus Deploy custom script logging的方式相同。

我想捕获Console.WriteLine()输出的原因是为了让脚本编写者能够使用熟悉的工具轻松记录信息。

这是我的脚本托管功能:

    public static dynamic RunScript()
    {
        var logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        var scriptServicesBuilder = new ScriptServicesBuilder(new ScriptConsole(), logger).
            LogLevel(LogLevel.Info).Cache(false).Repl(false).ScriptEngine<RoslynScriptEngine>();

        var scriptcs = scriptServicesBuilder.Build();

        scriptcs.Executor.Initialize(new[] { "System.Web" }, Enumerable.Empty<IScriptPack>());
        scriptcs.Executor.AddReferences(Assembly.GetExecutingAssembly());

        var result = scriptcs.Executor.Execute("Hello.csx");

        scriptcs.Executor.Terminate();

        if (result.CompileExceptionInfo != null)
            return new { error = result.CompileExceptionInfo.SourceException.Message };
        if (result.ExecuteExceptionInfo != null)
            return new { error = result.ExecuteExceptionInfo.SourceException.Message };

        return result.ReturnValue;
    }

我的Hello.csx文件的内容:

Console.WriteLine("This output is lost forever");

所以我的问题是如何捕获写入Console.WriteLine()的文本并保存?

0 个答案:

没有答案