2010-04-08 2 views
37

J'ai essayé de configurer un simple projet de journalisation pour faire rouler mes fichiers journaux par date et par taille de fichier, et jusqu'à présent, je n'ai pas réussi à faire basculer mon appender vers un autre fichier . Au lieu de cela, il écrit dans le journal spécifié par la balise < file/>.Journaux de journalisation sur la taille du fichier et le temps

Voici mon fichier de configuration logback.xml:

<?xml version="1.0"?> 
<configuration scan="true" scanPeriod="10 seconds"> 
    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
    </appender> 

    <appender name="milliroller" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>log/output.log</file> 
     <layout class="ch.qos.logback.classic.PatternLayout"> 
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> 
     </layout> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>log/mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>1KB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
    </appender> 

    <root level="DEBUG"> 
     <appender-ref ref="stdout"/> 
     <appender-ref ref="milliroller"/> 
    </root> 

    <logger name="com.tkassembled.logback" level="DEBUG"/> 
</configuration> 

À première vue, il semble que cela devrait fonctionner, non? Y a-t-il quelque chose que je fais de mal? Mon projet intégrable complet est disponible dans un zip ici: http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

Répondre

87

Bien que ce soit une vieille question, j'ai estimé qu'une réponse de travail est appropriée pour aider toute personne qui nécessite ce type de mise en œuvre.

J'utilise la configuration de journalisation suivante pour fournir un journal HTML, déployé par date et taille de fichier, ainsi que la journalisation sur console pour la sortie de débogage.

sont stockés dans Logfiles un répertoire logs avec un nom de logFile.html alors que son actif, et logFile.2013-mm-dd.i.html lorsqu'elle roule sur, où i est le nombre de fichiers journaux de 50 Mo. Par exemple logFile.2013-01-07.0.html.

<configuration> 

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!-- encoders are assigned the type 
     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> 
    <encoder> 
     <charset>UTF-8</charset> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{35}) - %msg %n</pattern> 
    </encoder> 
    </appender> 

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>logs\logFile.html</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <!-- daily rollover --> 
     <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern> 
     <timeBasedFileNamingAndTriggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
      <!-- or whenever the file size reaches 50MB --> 
     <maxFileSize>50MB</maxFileSize> 
     </timeBasedFileNamingAndTriggeringPolicy> 
     <!-- keep 30 days' worth of history --> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <charset>UTF-8</charset> 
     <layout class="ch.qos.logback.classic.html.HTMLLayout"> 
     <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern> 
     </layout>   
    </encoder> 
    </appender> 

    <root level="DEBUG"> 
    <appender-ref ref="STDOUT" /> 
    <appender-ref ref="FILE" />  
    </root> 

</configuration> 
+0

Merci! La connexion au format html est excellente par lisibilité. –

+0

Voir [la réponse d'AndreLDM] (https://stackoverflow.com/a/36707798/384674), cette configuration enregistre «SizeAndTimeBasedFNATP est obsolète» avec l'option 'debug = true' dans' logback.xml' – Betlista

+0

Selon mon test ' maxHistory' n'est pas le nombre de jours, mais le nombre de fichiers, donc si vous avez plus de fichiers par jour, vous aurez moins de jours ... – Betlista

-4

Vous devriez être en mesure de configurer votre journal en utilisant un FileHandler.

http://java.sun.com/j2se/1.4.2/docs/api/java/util/logging/FileHandler.html#FileHandler(java.lang.String, int, int)

Cela prend une limite de taille de fichier et tourne le journal quand il frappe cette limite.

+0

C'est utile mais en fait je cherche une solution dans Logback. Logback est une super bibliothèque et j'adorerais l'utiliser, à condition bien sûr que je puisse le faire. –

34

Depuis logback 1.1.7 (publié Mars 2016) un nouveau appender appelé SizeAndTimeBasedRollingPolicy est disponible qui simplifie considérablement ce que vous devez faire:

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>app.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> 
     <fileNamePattern>app-%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
     <maxFileSize>10MB</maxFileSize>  
     <maxHistory>30</maxHistory> 
     <totalSizeCap>1GB</totalSizeCap> 
    </rollingPolicy> 
    <encoder> 
     <pattern>%msg%n</pattern> 
    </encoder> 
</appender> 

Voir here pour plus d'infos.

+0

Selon mon test 'maxHistory' n'est pas le nombre de jours, mais le nombre de fichiers, donc si vous avez plus de fichiers par jour, vous aurez moins de jours ... – Betlista

+0

A moins que ce soit un bug, la [documentation] (https://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedRollingPolicy) est clair à propos de 'maxHistory' étant le nombre de jours (notez le commentaire xml). – AndreLDM

+0

Pas vraiment, [documentation] (https://logback.qos.ch/manual/appenders.html#tbrpMaxHistory) lit "La propriété optionnelle maxHistory contrôle le nombre maximum de fichiers archive à conserver ...", leur exemple de mensuel Le rollover est un peu confus et le commentaire en XML est vraiment faux. Je leur laisserai un e-mail et je vous le ferai savoir. – Betlista

Questions connexes