Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何记录托管脚本执行的控制台输出?_C#_Scriptcs - Fatal编程技术网

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

C# 如何记录托管脚本执行的控制台输出?,c#,scriptcs,C#,Scriptcs,我正在使用来承载动态脚本,我希望将Console.WriteLine()的输出作为信息捕获到日志中,并将Console.Error.WriteLine()作为错误捕获到日志中。一模一样 我之所以要捕获Console.WriteLine()输出,是为了让脚本编写者能够轻松地使用熟悉的工具记录信息 以下是我的脚本托管功能: public static dynamic RunScript() { var logger = LogManager.GetLogger(Sys

我正在使用来承载动态脚本,我希望将Console.WriteLine()的输出作为信息捕获到日志中,并将Console.Error.WriteLine()作为错误捕获到日志中。一模一样

我之所以要捕获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;
    }

因此,我的问题是如何捕获写入Console.WriteLine()的文本并保存它?

看一看nuget程序包调用Log4Net这应该有助于您了解nuget程序包调用Log4Net这应该有助于您
Console.WriteLine("This output is lost forever");