@Avram's answer ha funzionato per me, tranne che il sovraccarico singolo nel suo codice non era quello che ConsoleAppender
di log4net stava usando sul mio sistema. (Mi interessa Console.SetOut
modo ConsoleAppender
uscite di log4net a riquadro di Visual Studio "Debug" in uscita.) Quindi ho prevarrebbero tutti Write
e WriteLine
metodi StringWriter
s' accettare string
, object
, char[]
, ecc sul presupposto che uno o più di questi era quello che ConsoleAppender
stava chiamando tramite Console
.
Questa operazione è riuscita e la registrazione di log4net ora viene visualizzata nel riquadro "Debug".
Inserisco il codice seguente a beneficio di chiunque abbia obiettivi simili. (Per essere del tutto sicuri, uno potrebbe ignorare i restanti metodi StringWriter.Write
e .WriteLine
.) Ho rimosso le chiamate a base
perché sembrano non necessarie e penso che si limitino a creare un buffer di grandi dimensioni all'interno di StringWriter
(generalmente accessibile tramite quella classe .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);
}
}
}
Buona risposta. Grazie! –
Dannazione! Finalmente riesco a vedere le mie query su NHibernate su Visual Studio! –
Grazie! Perché preoccuparsi della chiamata a 'base.WriteLine'? –