在我的C#应用程序中,我通过反射加载另一个程序集。
此其他程序集使用Console.Write函数写入控制台。
我想将输出重定向到仅用于此特定程序集的log4net appender。我希望所有其他程序集继续输出到控制台。
我怎样才能做到这一点?
答案 0 :(得分:2)
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();
}
}
可能在某些情况下,例如一个程序集调用方法,从另一个程序集写入控制台。我不知道如何预测这种行为。