Réponses:
Dans votre fichier de configuration Log4net, utilisez le paramètre suivant avec RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
est la syntaxe correcte et c'est une excellente réponse. Comment la perte s'est-elle produite, puis-je demander?
<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>
Pour un RollingLogFileAppender, vous avez également besoin de ces éléments et valeurs:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
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" />
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
.
.
preserveLogFileNameExtension
ne fonctionne pas pour les versions antérieures de log4net (par exemple v1.2.10) comme il est décrit ici
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
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>
%date{yyyyMM}
et value="ddMMyyyy"
? quel est le modèle de date effective?
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.
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);