2008-10-28 10 views
20

Je suis configurer log4net d'utiliser un RollingFileAppender composite afin que le fichier en cours est toujours nommé LogFile.log et tous les fichiers suivants sont nommés -logfile YYYY.MM.dd.seq.logsuivants est la séquence nombre si un journal dépasse une certaine taille en un seul jour. Malheureusement, j'ai eu très peu de succès dans la configuration d'une telle configuration.Comment configurer un RollingFileAppender pour rouler par date et taille avec log4net?

Edit:

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 de 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, la mise en

<staticLogFileName value="false"/> 

à true, l'enregistreur de ne pas écrire des fichiers.

Répondre

13

Nous utilisons les éléments suivants (en 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

+1

Selon la documentation de log4j: On a observé que DailyRollingFileAppender présentait des problèmes de synchronisation et de perte de données. Le compagnon extras log4j inclut des alternatives qui doivent être prises en compte pour les nouveaux déploiements et qui sont décrites dans la documentation de org.apache.log4j.rolling.RollingFileAppender. –

4

Selon log4net RollingFileAppender code source:

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 devine que ce 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.

+0

@Ryan, Leandro: Il semble également qu'il n'y ait pas de moyen simple de contourner ce comportement. 'GetNextOutputFileName' n'est pas virtuel, et d'autres méthodes qui l'appellent font référence à des variables privées, donc vous ne pouvez pas simplement copier leur code et remplacer l'appel. Je pense que le mieux que vous pouvez faire est d'avoir un nom de fichier unique à chaque fois, en utilisant quelque chose comme l'option de modèle de date que vous avez fini par utiliser. –

0

Notez que ce cas est le

  <maxSizeRollBackups value="10"/> 

sera ignoré.

Voir ce answer à une question similaire log4net

1

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

valeur preserveLogFileNameExtension = "true"

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

Questions connexes