Comment configurer un RollingFileAppender pour qu'il se décompose par date et par taille avec log4net?
-
04-07-2019 - |
Question
Je configure Log4net pour qu'il utilise un RollingFileAppender composite afin que le fichier actuel porte toujours le nom logfile.log et que tous les fichiers suivants portent le nom logfile-YYYY.MM.dd.seq.log. où seq est le numéro de séquence si un journal dépasse une certaine taille au cours d'une seule journée. Malheureusement, j'ai eu très peu de succès dans la configuration d'une telle configuration.
Modifier:
Ma configuration actuelle est collée ci-dessous. Il a été mis à jour en fonction de plusieurs réponses, ce qui me permet de répondre suffisamment à mes besoins. Cela génère des fichiers au format: fichier_journal AAAA.MM.dd.log.seq
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\\logfile"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="_yyyy.MM.dd".log""/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="75KB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
</log4net>
Une note intéressante, paramètre
<staticLogFileName value="false"/>
à true empêche le consignateur d'écrire des fichiers.
La solution
Nous utilisons les éléments suivants (dans Log4J):
<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="Applog.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/>
</layout>
</appender>
Cela nous donne des fichiers Applog.log.yyyy-MM-jj
.Autres conseils
Selon le code source de log4net RollingFileAppender:
protected string GetNextOutputFileName(string fileName)
{
if (!m_staticLogFileName)
{
fileName = fileName.Trim();
if (m_rollDate)
{
fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo);
}
if (m_countDirection >= 0)
{
fileName = fileName + '.' + m_curSizeRollBackups;
}
}
return fileName;
}
Je suppose donc qu'il n'est pas possible de générer un fichier journal avec le nom dont vous avez besoin. Je pense que c'est quelque chose comme logfileYYYYY-MM-jj.n.log
ou similaire.
Essayez de définir cette propriété sur true:
preserveLogFileNameExtension value = " true "
Je pense que cette astuce vous aidera! Cependant, la propriété preserveLogFileNameExtension nécessite la dernière version de log4net, vous pouvez la trouver ici: logging.apache.org/ log4net / download.html
Notez que c'est le cas
<maxSizeRollBackups value="10"/>
sera ignoré.
Voir cette answer à une question similaire de log4net