2016-08-03 17 views
-1

Ich bin auf der Suche nach oben zu beobachten.Einstellung für einen <strong>Log4Net</strong> Betrachter, die ich in <strong>Realtime</strong> in einem separaten Konsolenfenster nicht in dem Visual Studio-Ausgabefenster, in dem sein gemischt mit Hunderten von anderen Nachrichten Log4Net Farbige Konsole Made Easy

ich es sehe, ist ein ManagedColoredConsoleAppender und ColoredConsoleAppender aus der Box, aber nicht sicher, wie die Ausgabe auf ein externes Konsolenfenster gerichtet werden zu bekommen. Im Idealfall würde beim Debuggen das Konsolenfenster zwar starten, aber keine Voraussetzung.

Ich habe die OutputDebugger zurück in den Tag, aber habe nicht einen einfachen Weg gefunden, all dies funktioniert zu bekommen.

Wenn jemand teilen könnte, wie man all dies verdrahtet und schnell arbeitet, würde das sehr geschätzt werden.

Dies würde hauptsächlich für die Entwicklung vor Ort verwendet werden, wäre aber schön, wenn wir Fehler von Staging und qa in ein nettes kleines Fenster auf meiner Maschine umleiten könnten, um zu sehen, was in Echtzeit passiert!

Antwort

0

Der ColoredConsoleAppender (und sein Nachfolger, ManagedColoredConsoleAppender) startet keine Konsole für Sie.

Wenn Sie jedoch eine Konsole manuell zu starten, werden sie es verwenden - hier ein Beispiel:

class Program { 

    [DllImport("kernel32.dll", EntryPoint = "GetStdHandle", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
    private static extern IntPtr GetStdHandle(int nStdHandle); 
    [DllImport("kernel32.dll", EntryPoint = "AllocConsole", SetLastError = true, CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] 
    private static extern int AllocConsole(); 
    private const int STD_OUTPUT_HANDLE = -11; 
    private const int MY_CODE_PAGE = 437; 

    private static readonly object lockObj = new object(); 
    static void Main(string[] args) { 

     AllocConsole(); 
     IntPtr stdHandle = GetStdHandle(STD_OUTPUT_HANDLE); 
     SafeFileHandle safeFileHandle = new SafeFileHandle(stdHandle, true); 
     FileStream fileStream = new FileStream(safeFileHandle, FileAccess.Write); 
     Encoding encoding = Encoding.GetEncoding(MY_CODE_PAGE); 
     StreamWriter standardOutput = new StreamWriter(fileStream, encoding) { AutoFlush = true }; 
     Console.SetOut(standardOutput); 

     XmlConfigurator.Configure(); 

     var log = LogManager.GetLogger("test"); 
     log.Debug("Starting Program"); 
     log.Error("Oh no, an error"); 
     // etc 

Dies ist die Ausgabe:

enter image description here

Die Konfiguration ist denkbar einfach:

<log4net> 
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <mapping> 
    <level value="ERROR" /> 
    <foreColor value="White" /> 
    <backColor value="Red, HighIntensity" /> 
    </mapping> 
    <mapping> 
    <level value="DEBUG" /> 
    <backColor value="Green" /> 
    </mapping> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="ColoredConsoleAppender" /> 
</root>