Nom de fichier journalier roulant Log4net avec date dans le nom de fichier


Réponses:


103

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

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

28
Apparemment, ceci a été promu à un élément de configuration: <datePattern value = "dd.MM.yyyy'.log '" /> Cheers!
longda

3
@mstaessen <preserveLogFileNameExtension value="true" />est la syntaxe correcte et c'est une excellente réponse. Comment la perte s'est-elle produite, puis-je demander?
Larry B

1
Si je me souviens bien, ça s'est passé comme ça. Au démarrage, log4net génère le premier nom de fichier de la séquence de roulement. Il détecterait que ce fichier existe déjà et déciderait alors de passer au deuxième fichier, mais lorsque celui-ci existe déjà, il ne décide pas de le lancer, mais l'efface et écrase tout dans ce deuxième fichier journal. Cela passe totalement inaperçu jusqu'à ce que vous ayez besoin des journaux de la période effacée ...
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
Je pense que vous devriez souligner le point principal de quel paramètre pour résoudre le problème comme l'a fait @Mun. Cependant, j'ai également voté pour votre réponse.
RDeveloper

1
C'est l'élément datePattern, en conjonction avec l'élément staticLogFileName (et notez l'attribut value pour l'élément file) qui a fonctionné pour moi
Michhes

La réponse complète!
Nagesh le

32

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

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

3
Cela fonctionne, mais ajoute la date après l'extension de fichier. Par exemple, j'obtiens des fichiers journaux comme Error.log20111104 - Est-ce que quelqu'un connaît un moyen de formater un peu mieux le nom de fichier?
LostNomad311

Voici comment mieux formater le nom du fichier: stackoverflow.com/questions/615092/…
LostNomad311

à quoi sert staticLogFileName? Je veux seulement que le fichier journal soit transformé en un nouveau nom après la fin de la journée. Je veux utiliser un moniteur de journal qui regarde un spécifique à chaque fois.
dim

22

En utilisant Log4Net 1.2.13, nous utilisons les paramètres de configuration suivants pour autoriser la date et l'heure dans le nom de 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 cela, il est généralement préférable d'avoir les éléments suivants pour vous assurer de conserver 1 journal par jour.

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

Si la taille du fichier est un problème, 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 en cours.

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

18

J'ai fini par utiliser (notez le nom de fichier '.log' et les guillemets simples autour 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" />

Cela me donne:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.

preserveLogFileNameExtensionne fonctionne pas pour les versions antérieures de log4net (par exemple v1.2.10) comme il est décrit ici
Dmitry Karpenko

13

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

Ensuite, j'ai expérimenté un peu les indices donnés dans chaque réponse et j'ai réussi avec le paramètre 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é comme .log20171215 ce qui créait une nouvelle heure de fichier (et un nouveau type de fichier! ) Chaque jour - ou les deux problèmes apparaissaient.

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

LOG4NET_Sample_Activity-20171215.log

c'est ce que je voulais.


Résumer:

  • Ne mettez pas le modèle de date dans le <file value=... attribut, définissez-le simplement dans le fichier datePattern.

  • Assurez-vous que l' attribut preserveLogFileNameExtension value est défini surtrue .

  • Assurez-vous que la staticLogFileName valeur est définie surfalse .

  • Définissez la valeur d'rollingStyle attribut sur .Date


Vous pouvez également définir rollingStyle sur Composite, qui roule à la fois sur la date et la taille.
Simon Tewsi

1
Fonctionne très bien. J'ajouterais également dans le résumé: Assurez-vous que la valeur staticLogFileName est définie sur false
Randall Flagg

5

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

pourquoi il y a %date{yyyyMM}et value="ddMMyyyy" ? quel est le modèle de date effective?
Allan Ruin

Je pense que datePattern est pour le nom du fichier mais% date {aaaaMM} est pour le répertoire parent (je le voulais ainsi)
Fourat

L'attribut datePattern définit la période glissante pour Date rollingStyle. Voir logging.apache.org/log4net/release/config-examples.html sous RollingFileAppender. "Par exemple, un modèle de date de" aaaaMMjj "sera lancé tous les jours. Voir System.Globalization.DateTimeFormatInfo pour une liste des modèles disponibles."
Ryan Buddicom

@rbuddicom ouais mais la question est de savoir comment conserver l'extension de fichier.
Fourat

Je sais, Allan a remis en question le but de 'value = "ddMMyyyy"'. Votre commentaire "Je pense que datePattern est pour le nom de fichier" est incorrect à cet égard.
Ryan Buddicom le

0

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

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

travaux répertoriés mais je n'ai pas eu à utiliser

<staticLogFileName value="false" /> 

. Je pense que RollingAppender doit (logiquement) ignorer ce paramètre puisque, par définition, le fichier est reconstruit chaque jour lorsque l'application redémarre / réutilisée. Peut-être est-ce important pour un rollover immédiat CHAQUE fois que l'application démarre.


Pour moi, cela ne fonctionnerait pas sans <staticLogFileName value = "false" />
nurettin

moi aussi, j'ai dû définir staticLogFileName sur false sinon il ne serait pas journalisé
oonyalo

0

J'ai déplacé la configuration vers le code pour permettre une modification facile de CI à l'aide de la variable système. J'ai utilisé ce code pour le nom de fichier et le résultat est '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);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.