在我的 C# 应用程序中,我通过反射加载另一个程序集。
此另一个程序集使用 Console.Write 函数写入控制台。
我想将输出重定向到仅针对此特定程序集的 log4net 附加程序。我希望所有其他程序集继续输出到控制台。
我怎样才能实现这个目标?
最佳答案
Console
类具有静态方法SetOut
,它将输出重定向到StreamWriter
对象。- 编写您自己的
StreamWriter
扩展类来重定向控制台输出(如果程序集与您想要的相同)。仅举个例子。
public class Writer : StreamWriter
{
private readonly Assembly _assembly;
private readonly StreamWriter _stdout;
public Writer(Assembly assembly)
: base(Console.OpenStandardOutput())
{
_assembly = assembly;
_stdout = new StreamWriter(Console.OpenStandardOutput());
}
public override void Write(string value)
{
var st = new StackTrace();
var curent = st.GetFrames();
foreach (var frame in curent)
{
if (frame.GetMethod().Module.Assembly == _assembly)
{
_stdout.Write("Redirected: " + value);
_stdout.Flush();
return;
}
}
base.Write(value);
this.Flush();
}
}
可能存在某些情况,例如一个程序集调用从另一程序集写入控制台的方法。我不知道如何预测这种行为。
关于c# - 重定向Console.Write特定程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842500/