web-dev-qa-db-fra.com

Comment configurer un RollingFileAppender pour rouler par date et taille avec log4net?

Je configure log4net pour utiliser un RollingFileAppender composite afin que le fichier actuel soit toujours nommé logfile.log et tous les fichiers suivants soient nommés logfile-YYYY.MM.dd.seq.log = où seq est le numéro de séquence si un journal dépasse une certaine taille en 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 rapproche suffisamment de mes besoins. Cela génère des fichiers au format: logfile_YYYY.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&quot;.log&quot;"/>
        <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, le réglage

<staticLogFileName value="false"/>

à true fait que l'enregistreur n'écrit aucun fichier.

24
Ryan Taylor

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 Applog.log.yyyy-MM-dd fichiers

15
paul

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 logfileYYYY-MM-dd.n.log ou similaire.

4
Leandro López

Essayez de définir cette propriété sur true:

preserveLogFileNameExtension value = "true"

Je crois que cette astuce vous aidera! Cependant, la propriété preserveLogFileNameExtension a besoin de la dernière version de log4net, vous pouvez la trouver ici: logging.Apache.org/log4net/download.html

1
Junrui

Notez que dans ce cas, le

            <maxSizeRollBackups value="10"/>

sera ignoré.

Voir ceci réponse à une question log4net similaire

0
Chasler