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() に書き込まれたテキストをキャプチャして保存するにはどうすればよいですか?