2010-02-14 13 views
30

Attualmente sto creando un'applicazione ASP.Net-MVC utilizzando log4net per la registrazione, ma il logger sembra fermarsi a caso. Sarà log felicemente per un po ', e poi si fermerà, e poi ricomincerà dopo un certo periodo di tempo. Non sono nemmeno sicuro di cosa sia ciò che fa riprendere la registrazione. Non sto parlando di alcuni messaggi che vengono persi - a volte scompaiono per un lungo periodo di tempo, ad esempio un'ora o giù di lì.Log4net interrompe in modo casuale la registrazione.

Perché dovrebbe fermarsi e iniziare così? Come dovrei configurarlo correttamente in modo che non si fermi casualmente come fa?

Ecco la mia configurazione:

<log4net debug="true"> 
<appender name="RollingLogFileAppender" 
     type="log4net.Appender.RollingFileAppender"> 

    <file value="..\Logs\\CurrentLog.txt" /> 
    <appendToFile value="true" /> 
    <datePattern value="yyyyMMdd" /> 

    <rollingStyle value="Date" /> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
    <acceptOnMatch value="true" /> 

    <levelMin value="INFO" /> 
    <levelMax value="FATAL" /> 
    </filter> 

    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern 
    value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" /> 
    </layout> 

</appender> 

<root> 
    <level value="INFO" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 

+1

Nel mio caso è stato ripristinando la registrazione (ri-configurazione, non in base alla progettazione ..) che ha causato questo genere di problemi - vedi http://neilkilbride.blogspot.com.au /2008/04/configure-log4net-only-once.html – Jonno

+0

Ti dispiacerebbe aggiungere una risposta o un commento che spieghi cosa ha causato il tuo problema, se hai trovato un motivo? –

+0

Sì, sarebbe bello sapere cosa ha causato il tuo problema, come ha detto Mark. A proposito, stavo avendo lo stesso problema e l'impostazione ReconnectOnError su true sotto la configurazione di ADONetAppender ha funzionato per me. – Jportelas

risposta

56

Log4Net volontà fail silently se qualcosa va storto ed è in grado di scrivere i suoi appenders. Questo è in realtà una buona cosa, dal momento che significa che un po 'di logging fallito non farà crollare un sistema altrimenti sano, ma può essere fastidioso quando qualcosa non registra come ci si aspetta.

La soluzione migliore è attivare il propriodi log4net per eseguire alcune operazioni di diagnostica e (si spera) risolvere il problema.

Così in add file di configurazione della tua app:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
     <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

che accendere la registrazione interna, che viene inviato a System.Diagnostics.Trace, in modo da poter aggiungere:

<configuration> 
    ... 
    <system.diagnostics> 
     <trace autoflush="true"> 
      <listeners> 
       <add 
        name="textWriterTraceListener" 
        type="System.Diagnostics.TextWriterTraceListener" 
        initializeData="C:\tmp\log4net.txt" /> 
      </listeners> 
     </trace> 
    </system.diagnostics> 
    ... 
</configuration> 

per catturare ad un file.

+1

Hai un esempio più completo di un simile file di configurazione? Ho provato numerose varianti e continuo a ricevere errori XML da XmlSerializationReader. Anche solo un tag '' vuoto rappresenta la differenza tra eccezione e non. –

+0

Ho lo stesso problema, e nel mio caso sembra che ogni volta che apro una finestra di dialogo standard, l'icona [Box] (https://box.com) sovrappone la DLL sovrascriva il processo in-log log4net.config con il proprio. –

+0

Questo NON è in realtà un aspetto positivo poiché potrebbero esserci strumenti di monitoraggio del sistema e di notifica degli errori che dipendono da esso e, se interrompe la registrazione, non è possibile conoscere un'eccezione.Odio questo schifoso strumento di registrazione, è sempre un mal di testa a prescindere dalla compagnia in cui vado, qualunque sia la versione utilizzata, c'è sempre mal di testa. Prodotto scadente degli sviluppatori schifosi .. – sotn

0

Inviare un messaggio di registro di test il più presto possibile nel ciclo di vita dell'applicazione, sarà sufficiente un semplice LogManager.GetLogger("Init").Info("Starting logging"). Se prima viene avviato un altro codice di riferimento, una parte del processo di inizializzazione potrebbe non riuscire (poiché carica le impostazioni da un altro assieme, cosa che fa una sola volta).

leggere qui: https://logging.apache.org/log4net/release/faq.html#first-log

Problemi correlati