Risposte:
Nel file di configurazione di Log4net, utilizza il seguente parametro con RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
è la sintassi corretta e questa è un'ottima risposta. Come si è verificata la perdita, posso chiedere?
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
Per un RollingLogFileAppender sono necessari anche questi elementi e valori:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
Utilizzando Log4Net 1.2.13 utilizziamo le seguenti impostazioni di configurazione per consentire la data e l'ora nel nome del file.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Che fornirà i file nella seguente convenzione: logname-2015-04-17.txt
Con questo di solito è meglio avere quanto segue per assicurarti di tenere 1 registro al giorno.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
Se la dimensione del file è un problema, quanto segue consente 500 file di 5 MB di dimensione fino a quando non viene generato un nuovo giorno. CountDirection consente la numerazione crescente o decrescente dei file che non sono più correnti.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
Ho finito per usare (nota il nome del file ".log" e le virgolette singole attorno a "nomefile_"):
<rollingStyle value="Date" />
<datePattern value="'myfilename_'yyyy-MM-dd"/>
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />
Questo mi dà:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
non funziona per le versioni precedenti di log4net (ad es. v1.2.10) come descritto qui
Ho provato tutte le risposte, ma c'era sempre qualcosa che mancava e non funzionava come previsto per me.
Quindi ho sperimentato un po 'con i suggerimenti forniti in ciascuna risposta e ho avuto successo con la seguente impostazione:
<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="-yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
Il problema con altre combinazioni di parametri era che il file più recente non aveva lo schema temporale o che lo schema temporale veniva aggiunto in modo da .log20171215
creare una nuova ora del file (e un nuovo tipo di file! ) Ogni giorno - o entrambi i problemi apparivano.
Ora con questa impostazione stai ottenendo file come questo:
LOG4NET_Sample_Activity-20171215.log
che è quello che volevo.
Riassumere:
Non inserire il modello di data <file value=...
nell'attributo, definiscilo semplicemente nel file datePattern
.
Assicurati di avere l' attributo preserveLogFileNameExtension
value impostato su true
.
Assicurati di avere il staticLogFileName
valore impostato su false
.
Imposta il valorerollingStyle
dell'attributo su .Date
Per preservare l'estensione del file:
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="30MB" />
<staticLogFileName value="true" />
<preserveLogFileNameExtension value="true"/>
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
%date{yyyyMM}
e value="ddMMyyyy"
? qual è lo schema della data di validità?
La sezione di configurazione estesa in una risposta precedente con
...
...
<rollingStyle value="Composite" />
...
...
elencato funziona ma non ho dovuto usare
<staticLogFileName value="false" />
. Penso che RollingAppender debba (logicamente) ignorare tale impostazione poiché per definizione il file viene ricostruito ogni giorno quando l'applicazione viene riavviata / riutilizzata. Forse è importante per il rollover immediato OGNI volta che l'applicazione viene avviata.
Ho spostato la configurazione nel codice per consentire una facile modifica da CI utilizzando la variabile di sistema. Ho usato questo codice per il nome del file e il risultato è "Log_03-23-2020.log"
log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
Hierarchy hierarchy = (Hierarchy)repository;
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = "Log_";
roller.DatePattern = "MM-dd-yyyy'.log'";
roller.Layout = patternLayout;
roller.MaxFileSize = 1024*1024*10;
roller.MaxSizeRollBackups = 10;
roller.StaticLogFileName = false;
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);