c# - 重定向Console.Write特定程序集

标签 c# .net logging reflection log4net

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

此另一个程序集使用 Console.Write 函数写入控制台。

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

我怎样才能实现这个目标?

最佳答案

  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();
        }
    }

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

关于c# - 重定向Console.Write特定程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842500/

相关文章:

c# - 在 ASP.NET Core MVC 中注入(inject) ApplicationUser

c# - Asp.NET MVC,自定义TextWriterTraceListener不创建文件

.net - 使用 CCKeyDerivationPBKDF 获取派生 key

.net - 在 menuitem WPF xaml 中创建分隔符

javascript - winston 记录器未在新行上打印

node.js - 如何在 Heroku 上部署的 Loopback 应用程序中记录 HTTP JSON 请求?

接口(interface)中的 Java "Cache"SLF4J 记录器

c# - 结构中指针字段的大小

c# - 缓存故障 : dynamic css files

c# - 用于单元测试目的的重载构造函数