@ Ответ Аврама сработал для меня, за исключением того, что единственная перегрузка в его коде была не той, которую ConsoleAppender
log4net использовал в моей системе. (Меня интересует Console.SetOut
, чтобы log4net ConsoleAppender
выводил на панель вывода Visual Studio "Debug".) Поэтому я переопределил все StringWriter
* Write
и WriteLine
методы, принимающие string
, object
, char[]
и т. Д. При условии, что один или несколько из них были тем, что ConsoleAppender
вызывал через Console
.
Это успешно выполнено, и запись в журнал log4net теперь отображается в моей панели «Отладка».
Я включил приведенный ниже код в пользу тех, кто преследует аналогичные цели. (Чтобы быть полностью безопасным, можно переопределить оставшиеся методы StringWriter.Write
и .WriteLine
.) Я удалил вызовы к base
, потому что они кажутся ненужными, и я думаю, что они просто создают большой буфер внутри StringWriter
(обычно доступ к этому классу .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);
}
}
}