Domanda

Sto usando log4net in un progetto C #, nell'ambiente di produzione, voglio disabilitare tutta la registrazione, ma quando qualche fatale si verifica un errore che dovrebbe accedere a tutti i 512 messaggi precedenti in un file. L'ho configurato correttamente e funziona correttamente. Registra i messaggi in un file quando si verifica un errore irreversibile.

Ma quando lo eseguo da Visual Studio, posso vedere tutti i messaggi di log scritti nella finestra Output, indipendentemente dal fatto che sia fatale o meno. (Non riesco a vedere questi messaggi quando corro da Esplora risorse - la mia applicazione è un exe WinForm e non c'è una finestra della console per vedere l'output)

Esiste un modo per disabilitare questa registrazione? Ho bisogno dei miei log solo nel file, anche quando si verifica un errore fatale.

<?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>

Ed è così che lo configuro nell'inizializzatore statico di Windows Form.

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

E ho l'oggetto logger inizializzato nel costruttore di WinForm

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

[lingua - C #, .NET Framework - 3.5, Visual Studio 2008, log4net 1.2.10, tipo di progetto - WinForms]

È stato utile?

Soluzione

Rimuovi BasicConfigurator.Configure () linea. Questo è quello che fa quella linea: aggiunge un ConsoleAppender che punta a Console.Out.

Altri suggerimenti

Riesci ancora a vedere i messaggi in Visual Studio se l'applicazione viene compilata in modalità di rilascio? È possibile che log4net utilizzi Debug.Write per mostrare comunque gli errori. In tal caso, quei messaggi non dovrebbero apparire in modalità di rilascio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top