2010-02-18 14 views
11

INTENTI:log4net - Rimuovere i vecchi file di laminazione per data

a) Voglio che i miei registri per essere rotolati in base alla data in seguente formato di file AAAA-MM-dd.txt.

b) Inoltre, desidero rimuovere i file vecchi che non rientrano nell'intervallo maxSizeRollBackups.

CAUTION A maximum number of backup files when rolling on date/time 
    boundaries is not supported. [RollingFileAppender spec][1] 

SOLUZIONE

per a) è sufficiente per eseguire la configurazione

<appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs\" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <maxSizeRollBackups value="30" /> 
    <datePattern value="yyyy-MM-dd'.txt'" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.XmlLayoutSchemaLog4j"/> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
</appender> 

per b) è l'eredità da RollingFileAppender + canc roba l'unico modo per raggiungere questo obiettivo ?

+0

Ecco Attenzione -> http://logging.apache.org/log4net/release/ sdk/log4net.Appender.RollingFileAppender.html – ruslander

risposta

7

Ho passato un po 'di tempo a esaminare questo alcuni mesi fa. v1.2.10 non supporta l'eliminazione dei file di registro precedenti in base alla data corrente. È nella lista delle attività per la prossima versione. Ho preso il codice sorgente e ho aggiunto la funzionalità da solo, e l'ho pubblicato per altri se fossero interessati. Il problema e la patch sono disponibili al numero https://issues.apache.org/jira/browse/LOG4NET-27.

+2

Quindi hai aggiunto la patch nel 2005 e non è stata ancora accettata ?! –

+1

(a dire il vero, non è un progetto molto attivo) La spiegazione è https://issues.apache.org/jira/browse/LOG4NET-27?focusedCommentId=13248077&page=com.atlassian.jira.plugin.system .issuetabpanels: commento-tabpanel # comment-13248077 –

1

Sembra che la patch versione 4 di RollingFileAppenderer fornita qui https://issues.apache.org/jira/secure/attachment/12565940/RollingFileAppender.zip funzioni correttamente con una piccola modifica: nella riga 1286 sostituire ". *" Con "*".

Per questo si può utilizzare la seguente configurazione:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="MyProduct.log" /> 
    <param name="DatePattern" value="'_'yyyy-MM-dd"/> 
    <param name="AppendToFile" value="true"/> 
    <param name="RollingStyle" value="Date"/> 
    <param name="StaticLogFileName" value="false"/> 
    <param name="MaxDateRollBackups" value="3" /> 
    <param name="preserveLogFileNameExtension" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <param name="ConversionPattern" value="%r %d [%t] %-5p %c - %m%n"/> 
    </layout> 
</appender> 
0

Considerando che più di un decennio passava e non è ancora supportato, ho optato per la seguente soluzione di assoluta RollingFileAppender con le funzionalità richieste:

public class RollingDateAppender : RollingFileAppender { 
    public TimeSpan MaxAgeRollBackups { get; set; } 

    public RollingDateAppender() 
    : base() { 
    PreserveLogFileNameExtension = true; 
    StaticLogFileName = false; 
    } 

    protected override void AdjustFileBeforeAppend() { 
    base.AdjustFileBeforeAppend(); 

    string LogFolder = Path.GetDirectoryName(File); 
    var CheckTime = DateTime.Now.Subtract(MaxAgeRollBackups); 
    foreach (string file in Directory.GetFiles(LogFolder, "*.log")) { 
     if (System.IO.File.GetLastWriteTime(file) < CheckTime) 
     DeleteFile(file); 
    } 
    } 

} 

la configurazione è semplice come con la classe originale:

roller = new RollingDateAppender { 
    AppendToFile = true, 
    File = ...; 
    MaxAgeRollBackups = TimeSpan.FromDays(7), 
    RollingStyle = RollingFileAppender.RollingMode.Date, 
    ... 
}; 
roller.ActivateOptions(); 
BasicConfigurator.Configure(roller); 

Si noti che cercare i file *.log nella directory di registro ha senso solo se si utilizza PreserveLogFileNameExtension o si utilizza DatePattern per includere l'estensione alla fine del nome file. Se hai bisogno di uno schema di denominazione diverso, modificali in sincronizzazione.

(ho usato la versione 2.0.8 di log4net, le versioni precedenti potrebbero non consentire la funzione necessaria per essere sovrascritta.)

Problemi correlati