我正在使用scriptcs.net托管动态脚本,我想将 Console.WriteLine() 的输出作为信息捕获到我的日志中,并将 Console.Error.WriteLine() 作为错误捕获。与Octopus Deploy 自定义脚本日志记录的方式相同。
我想捕获 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() 的文本并保存它?