Respuestas:
En su archivo de configuración de Log4net, use el siguiente parámetro con RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
es la sintaxis correcta y esta es una gran respuesta. ¿Cómo ocurrió la pérdida, puedo preguntar?
<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>
Para un RollingLogFileAppender también necesita estos elementos y valores:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
Usando Log4Net 1.2.13 usamos los siguientes ajustes de configuración para permitir la fecha y hora en el nombre del archivo.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Que proporcionará archivos en la siguiente convención: logname-2015-04-17.txt
Con esto, generalmente es mejor tener lo siguiente para asegurarse de tener 1 registro por día.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
Si el tamaño del archivo es una preocupación, lo siguiente permite 500 archivos de 5 MB de tamaño hasta que aparezca un nuevo día. CountDirection permite la numeración ascendente o descendente de archivos que ya no son actuales.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
Terminé usando (tenga en cuenta el nombre de archivo '.log' y las comillas simples alrededor de 'myfilename_'):
<rollingStyle value="Date" />
<datePattern value="'myfilename_'yyyy-MM-dd"/>
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />
Esto me da:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
no funciona para versiones anteriores de log4net (por ejemplo, v1.2.10) como se describe aquí
Probé todas las respuestas, pero siempre faltaba algo y no funcionaba como esperaba.
Luego experimenté un poco con las sugerencias dadas en cada respuesta y tuve éxito con la siguiente configuración:
<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>
El problema con otras combinaciones de parámetros era que el último archivo no tenía el patrón de tiempo, o que el patrón de tiempo se adjuntaba como lo .log20171215
que creaba un nuevo tiempo de archivo (¡y un nuevo tipo de archivo! ) Cada día, o aparecían ambos problemas.
Ahora, con esta configuración, obtienes archivos como este:
LOG4NET_Sample_Activity-20171215.log
que es lo que quería.
Para resumir:
No ponga el patrón de fecha en el <file value=...
atributo, simplemente defínalo en el datePattern
.
Asegúrese de tener el atributo de preserveLogFileNameExtension
valor establecido en true
.
Asegúrese de tener el staticLogFileName
valor configurado en false
.
Establezca el valor del rollingStyle
atributo en .Date
Para conservar la extensión del archivo:
<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}
y value="ddMMyyyy"
? ¿Cuál es el patrón de fecha de vigencia?
La sección de configuración extendida en una respuesta anterior con
...
...
<rollingStyle value="Composite" />
...
...
trabajos enumerados pero no tuve que usar
<staticLogFileName value="false" />
. Creo que RollingAppender debe (lógicamente) ignorar esa configuración ya que, por definición, el archivo se reconstruye cada día cuando la aplicación se reinicia / reutiliza. Quizás sea importante para la renovación inmediata CADA vez que se inicie la aplicación.
Moví la configuración al código para permitir una fácil modificación desde CI usando la variable del sistema. Usé este código para el nombre del archivo y el resultado es '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);