Frage

Ich verwende log4net in einem C # -Projekt, in der Produktionsumgebung, ich will alle, die Protokollierung deaktivieren, aber wenn einige fatal Fehler occures es sollten alle vorherigen 512 Meldungen in eine file.I log haben dies erfolgreich konfiguriert, und es funktioniert gut. Es protokolliert die Meldungen in eine Datei, wenn einige schwerwiegenden Fehler occures.

Aber wenn ich es von Visual Studio ausgeführt wird, kann ich sehen, dass alle Log-Meldungen an das Ausgabefenster geschrieben werden, unabhängig davon, ob es sich um ein Fatal ist oder nicht. (Ich kann diese Nachrichten sehen, wenn ich aus dem Windows Explorer ausführen - meine Anwendung ist ein WinForm exe und es gibt keine Fenster Konsole die Ausgabe zu sehen)

Gibt es eine Möglichkeit, diese Protokollierung zu deaktivieren? Ich brauche meine Protokolle nur in der Datei, dass auch wenn einige fatale Fehler occures.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <log4net debug="false">

        <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Size" />
            <maxSizeRollBackups value="10" />
            <maximumFileSize value="1MB" />
            <staticLogFileName value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
            </layout>
        </appender>

        <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender" >
            <bufferSize value="512" />
            <lossy value="true" />
            <evaluator type="log4net.Core.LevelEvaluator">
                <threshold value="FATAL"/>
            </evaluator>
            <appender-ref ref="RollingFileAppender" />
        </appender> 

        <root>
            <level value="DEBUG" />
            <appender-ref ref="BufferingForwardingAppender" />          
        </root>
    </log4net>
</configuration>

Und das ist, wie ich es in der statischen Initialisierung von Windows Forms konfigurieren.

static Window1()
    {
      Stream vStream = typeof(Window1).Assembly.GetManifestResourceStream("TestLogNet.log4net.config");
      XmlConfigurator.Configure(vStream);
      BasicConfigurator.Configure();
    }

Und ich habe das Logger-Objekt im Konstruktor von WinForm initialisiert

logger = LogManager.GetLogger(typeof(Window1));

[Sprache - C #, .NET Framework - 3.5, Visual Studio 2008, log4net 1.2.10, Projekttyp - WinForms]

War es hilfreich?

Lösung

Entfernen Sie die BasicConfigurator.Configure () Linie. Das ist, was diese Zeile tut -. Fügt eine ConsoleAppender deutete auf Console.Out

Andere Tipps

Sehen Sie noch die Nachrichten in Visual Studio, wenn die Anwendung im Releasemodus kompiliert wird? Es ist möglich, dass log4net Debug.Write verwendet sowieso die Fehler zu zeigen. Wenn das der Fall ist, dann sollten diese Meldungen nicht im Release-Modus angezeigt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top