@Avram's answer 对我有用,只是他的代码中的单个重载不是 log4net 的ConsoleAppender 在我的系统上使用的那个。 (我对Console.SetOut 感兴趣,因此log4net 的ConsoleAppender 输出到Visual Studio 的“调试”输出窗格。)所以我覆盖了所有StringWriter 的Write 和WriteLine 方法接受string,@ 987654329@、char[] 等,假设其中一个或多个是 ConsoleAppender 通过 Console 调用的。
这成功了,log4net 日志现在出现在我的“调试”窗格中。
我包含下面的代码是为了让任何有类似目标的人受益。 (为了完全安全,可以覆盖剩余的StringWriter.Write 和.WriteLine 方法。)我已经删除了对base 的调用,因为它们似乎是不必要的,我认为它们只是在@ 内部建立了一个大缓冲区987654336@(通常通过该类的.ToString()访问。)
namespace GeneralLibrary.Logging
{
using System.Diagnostics;
using System.IO;
public class DebugWriter : StringWriter
{
public override void Write(string format, object arg0)
{
Debug.Write(string.Format(format, arg0));
}
public override void Write(string format, object arg0, object arg1)
{
Debug.Write(string.Format(format, arg0, arg1));
}
public override void Write(string format, object arg0, object arg1, object arg2)
{
Debug.Write(string.Format(format, arg0, arg1, arg2));
}
public override void Write(string format, params object[] arg)
{
Debug.Write(string.Format(format, arg));
}
public override void Write(object value)
{
Debug.Write(value);
}
public override void Write(string value)
{
Debug.Write(value);
}
public override void Write(char[] buffer)
{
Debug.Write(buffer);
}
public override void Write(char[] buffer, int index, int count)
{
Debug.Write(new string(buffer, index, count));
}
public override void WriteLine(string value)
{
Debug.WriteLine(value);
}
public override void WriteLine(object value)
{
Debug.WriteLine(value);
}
public override void WriteLine(string format, object arg0)
{
Debug.WriteLine(format, arg0);
}
public override void WriteLine(string format, object arg0, object arg1)
{
Debug.WriteLine(format, arg0, arg1);
}
public override void WriteLine(string format, object arg0, object arg1, object arg2)
{
Debug.WriteLine(format, arg0, arg1, arg2);
}
public override void WriteLine(string format, params object[] arg)
{
Debug.WriteLine(format, arg);
}
public override void WriteLine(char[] buffer)
{
Debug.WriteLine(buffer);
}
public override void WriteLine(char[] buffer, int index, int count)
{
Debug.WriteLine(new string(buffer, index, count));
}
public override void WriteLine()
{
Debug.WriteLine(string.Empty);
}
}
}