Log4net rodando el nombre de archivo diario con la fecha en el nombre del archivo


Respuestas:


103

En su archivo de configuración de Log4net, use el siguiente parámetro con RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

28
Parece que esto ha sido promovido a un elemento de configuración: <datePattern value = "dd.MM.yyyy'.log '" /> ¡Salud!
— Longda

3
@mstaessen <preserveLogFileNameExtension value="true" />es la sintaxis correcta y esta es una gran respuesta. ¿Cómo ocurrió la pérdida, puedo preguntar?
— Larry B

1
Si mal no recuerdo, fue así. Al inicio, log4net generaría el primer nombre de archivo en la secuencia continua. Detectaría que ese archivo ya existe y luego decidiría pasar al segundo archivo, pero cuando ese también ya existe, no decide hacerlo, sino que lo borra y sobrescribe todo en ese segundo archivo de registro. Se conoce por completo desapercibida hasta que necesite los registros de los plazos aclarado ...
— mstaessen

207
<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>

1
Creo que debería resaltar el punto principal de qué parámetro para resolver el problema como lo hizo @Mun. Sin embargo, también voté a favor de su respuesta.
— RDeveloper

1
Fue el elemento datePattern, junto con el elemento staticLogFileName (y tenga en cuenta el atributo de valor para el elemento de archivo) lo que funcionó para mí
— Michhes

¡La respuesta completa!
— Nagesh

32

Para un RollingLogFileAppender también necesita estos elementos y valores:

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
Esto funciona, pero agrega la fecha después de la extensión del archivo. Por ejemplo, obtengo archivos de registro como Error.log20111104: ¿Alguien conoce una forma de formatear el nombre del archivo un poco mejor?
— LostNomad311

Aquí se explica cómo formatear mejor el nombre del archivo: stackoverflow.com/questions/615092/…
— LostNomad311

¿Para qué se utiliza staticLogFileName? Solo quiero que el archivo de registro se transfiera a un nuevo nombre después de que termine el día. Quiero usar un monitor de registro que mire un específico cada vez.
— Sun

22

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" />

18

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
.
.

preserveLogFileNameExtensionno funciona para versiones anteriores de log4net (por ejemplo, v1.2.10) como se describe aquí
— Dmitry Karpenko

13

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 .log20171215que 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 rollingStyleatributo en .Date


También puede establecer rollingStyle en Composite, que se muestra tanto en la fecha como en el tamaño.
— Simon Tewsi

1
Funciona genial. También agregaría el resumen: asegúrese de tener el valor staticLogFileName establecido en falso
— Randall Flagg

5

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>

¿Por qué hay %date{yyyyMM}y value="ddMMyyyy" ? ¿Cuál es el patrón de fecha de vigencia?
— Allan Ruin

Creo que datePattern es para el nombre del archivo pero% date {yyyyMM} es para el directorio principal (lo quería de esa manera)
— Fourat

El atributo datePattern establece el período continuo para Date rollingStyle. Consulte logging.apache.org/log4net/release/config-examples.html en RollingFileAppender. "Por ejemplo, un patrón de fecha de" aaaaMMdd "aparecerá todos los días. Consulte System.Globalization.DateTimeFormatInfo para obtener una lista de patrones disponibles".
— Ryan Buddicom

@rbuddicom sí, pero la pregunta es cómo conservar la extensión del archivo.
— Fourat

Lo sé, Allan cuestionó el propósito de 'value = "ddMMyyyy"'. Su comentario "Creo que datePattern es para el nombre del archivo" es incorrecto en ese sentido.
— Ryan Buddicom

0

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.


Para mí, no funcionaría sin el <staticLogFileName value = "false" />
— nurettin

yo también, tuve que establecer staticLogFileName en falso, de lo contrario no se registraría
— oonyalo

0

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);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.