web-dev-qa-db-fra.com

Log4net roulement quotidien nom de fichier avec la date dans le nom du fichier

J'aimerais que les fichiers soient nommés par exemple:

jj.mm.aaaa.log

Comment est-ce possible avec log4net?

113
JL.

Dans votre fichier de configuration Log4net, utilisez le paramètre suivant avec RollingFileAppender:

<param name="DatePattern" value="dd.MM.yyyy'.log'" />
97
Mun
<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>
191
Nonkichi

Pour un RollingLogFileAppender, vous avez également besoin de ces éléments et valeurs:

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

En utilisant Log4Net 1.2.13, nous utilisons les paramètres de configuration suivants pour autoriser la date et l'heure dans le nom du fichier.

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

Qui fournira des fichiers dans la convention suivante: logname-2015-04-17.txt

Avec ceci, il est généralement préférable d’avoir ce qui suit pour vous assurer de tenir 1 journal par jour.

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

Si la taille du fichier pose problème, voici ce qui suit autorise 500 fichiers de 5 Mo jusqu’à ce qu’un nouveau jour apparaisse. CountDirection permet la numérotation croissante ou décroissante des fichiers qui ne sont plus actuels.

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />
19
Jack Thorley

J'ai fini par utiliser (notez le nom de fichier '.log' et les guillemets simples autour de 'monfichier_'):

  <rollingStyle value="Date" />
  <datePattern value="'myfilename_'yyyy-MM-dd"/>
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />
  <file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />

Cela me donne:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
15
Njal

J'ai essayé toutes les réponses, mais il manquait toujours quelque chose qui ne fonctionnait pas comme prévu.

Ensuite, j'ai un peu expérimenté les astuces données dans chaque réponse et j'ai réussi le réglage suivant:

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

Le problème avec d’autres combinaisons de paramètres était que le dernier fichier n’avait pas le modèle de temps, ou que le modèle de temps était ajouté en tant que .log20171215 qui a créé un nouveau fichier heure (et un nouveau type de fichier!) chaque jour - ou les deux numéros sont parus.

Maintenant, avec ce paramètre, vous obtenez des fichiers comme celui-ci:

LOG4NET_Sample_Activity-20171215.log

c'est ce que je voulais.


Pour résumer:

  • Ne mettez pas le modèle de date dans le <file value=... attribut, il suffit de le définir dans le datePattern.

  • Assurez-vous que l'attribut preserveLogFileNameExtensionvaleur est défini sur true.

  • Assurez-vous que vous avez le staticLogFileNamevaleur défini sur false.

  • Définissez l'attribut rollingStylevaleur sur Date.

8
Matt

Pour préserver l'extension de fichier:

<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>
5
Fourat

La section de configuration étendue dans une réponse précédente avec

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

œuvres énumérées, mais je n'ai pas eu à utiliser

<staticLogFileName value="false" /> 

. Je pense que RollingAppender doit (logiquement) ignorer ce paramètre car, par définition, le fichier est reconstruit chaque jour au redémarrage/la réutilisation de l'application. Peut-être que cela importe pour le basculement immédiat CHAQUE fois que l’application démarre.

0
AllenM