Sto riflettendo sullo same issue as HENRI COOK did. È stato segnalato come bug on Apache Jira per quanto possiamo dire dalla breve descrizione.Log4Net RollingFileAppender non scarica il buffer IO con il registro del volume basso
Il mio problema in sostanza è che gli eventi vengono registrati solo quando l'applicazione viene chiusa (anche settimane dopo l'evento). Ciò accade quando il volume di registrazione è molto basso. Sto vedendo questo su un Windows Server 2008 R2. Questo ci impedisce di catturare e reagire agli errori di produzione.
Ora l'appender non è un buffer. Per impostazione predefinita, chiama anche Flush() sul flusso sottostante ogni volta che un messaggio viene aggiunto.
La mia domanda è PERCHÉ non si sta scaricando? E c'è qualche rimedio oltre allo programatically flushing all appenders? Prenderesti in considerazione un pulsing appender come soluzione alternativa?
La configurazione appender:
<appender name="RollingErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="D:\LogFiles\zzzz\xxxxxx__ERROR" />
<param name="AppendToFile" value="true" />
<param name="DatePattern" value="_yyyyMMddHH".log"" />
<param name="RollingStyle" value="Date" />
<param name="StaticLogFileName" value="false" />
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR" />
<param name="LevelMax" value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%utcdate{yyyy-MM-dd HH:mm:ss.fff},[%thread],%level,%logger,%m%n"/>
</layout>
</appender>
UPDATE 2013-06-19
non sono stato in grado di riprodurre il comportamento con qualsiasi codice. Non importa quanto mi sforzi, i dati vengono sempre scritti sul disco immediatamente. Tuttavia, è stata effettuata un'osservazione importante: se la prima scrittura su un file è maggiore di 1KB, la modifica non viene mai aggiornata con le scritture successive. Sarà aggiornato solo quando il file viene chiuso con il tempo di chiusura. Se d'altra parte la prima scrittura è una breve copertina, ogni successiva scrittura aggiornerà il tempo modificato. Questo comportamento è coerente tra log4net e operazione manuale IO, tra WinXP a 32 bit e W2k8R2 a 64 bit, tra .NET 2.0, 3.5 e .NET 4.0. Questo non risolve ancora il problema, ma almeno riesco a capire lo strano schema di modifica-ora.
Grazie, Rob
puoi pubblicare la configurazione per l'appender si sta utilizzando? –
@AdamS, config added, thank you – Rbjz
E per chiarire, non vedi i registri rotolare ogni ora quando c'è stato almeno un livello di ERRORE o un evento di registrazione superiore durante quel periodo?Ho provato con il tuo appender e ho visto i log scorrere e rotolare correttamente. –