2012-04-18 13 views
10

Ho questa impostazioni per log4net nel log4net.config per consentire più thread di scrivere allo stesso file:log4net + più thread + rolling appender di file di

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <!-- Minimal locking to allow multiple threads to write to the same file --> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
    <file value="log\UI.log"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <maxSizeRollBackups value="30"/> 
    <datePattern value="-yyyyMMdd"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level [%property{identity}] %logger{3} - %message%newline"/> 
    </layout> 
</appender> 

Ma dopo la mezzanotte il nuovo file di registro creato viene sovrascritto tutto il tempo e quindi c'è solo l'ultimo evento nel file. Dopo il riavvio del server, tutto torna a destra fino alla mezzanotte successiva.
Quindi qualcuno può dire se questo è un problema di configurazione o questo è solo un problema log4net?

+0

qualsiasi soluzione per consentire a ogni thread di scrivere su file diversi (ad esempio ogni thread ha il proprio file)? –

risposta

10

Il problema è stato risolto rimuovendo la chiave modello bloccaggio poiché ho solo processo (IIS w3wp.exe) che utilizza lo stesso registratore.

<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 

Poiché si diceva here:

Se si utilizzano le cose RollingFileAppender diventano ancora peggio, come molti processi potrebbero tentare di iniziare a rotolare il file di log contemporaneamente. RollingFileAppender ignora completamente il modello di blocco durante lo scorrimento dei file, i file in rotazione semplicemente non sono compatibili con questo scenario.

Penso che otterrete risultati imprevedibili.

0

La mia ipotesi è che l'uso di un segno - sullo datePattern confonda il framework in modo tale che dopo il primo roll qualsiasi log attivi un evento roll.

Cosa succede quando si tenta questo con

<datePattern value="yyyyMMdd" /> 

per l'esempio here.

Per modificare il periodo di rotazione, regolare il valore DatePattern. Per esempio , un modello di data di "aaaaMMgg" verrà eseguito ogni giorno. Vedere System.Globalization.DateTimeFormatInfo per un elenco dei modelli disponibili .

Problemi correlati