重定向Console.Write特定程序集

时间:2014-04-03 15:37:59

标签: c# .net logging reflection log4net

在我的C#应用​​程序中,我通过反射加载另一个程序集。

此其他程序集使用Console.Write函数写入控制台。

我想将输出重定向到仅用于此特定程序集的log4net appender。我希望所有其他程序集继续输出到控制台。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

  1. Console类有静态方法SetOut,它将输出重定向到StreamWriter对象。
  2. 如果程序集与您想要的相同,请编写您自己的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();
    }
    

    }

  3. 可能在某些情况下,例如一个程序集调用方法,从另一个程序集写入控制台。我不知道如何预测这种行为。