Les logs de logback sur filesize et time

j'ai essayé de mettre en place un projet de logback simple pour lancer mes fichiers journaux par date et par filesize, et jusqu'à présent, je n'ai pas été en mesure d'obtenir mon appender pour rouler vers un autre fichier. Au lieu de cela, il écrit dans le journal spécifié par la balise .

Voici mon logback.fichier de configuration 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, on dirait que ça devrait marcher, non? Est-il quelque chose que je fais mal? Mon projet complet est disponible en format zip ici: http://www.mediafire.com/file/2bxokkdyz2i/logback.zip

40
demandé sur Betlista 2010-04-08 22:23:35

3 réponses

bien qu'il s'agisse d'une vieille question, j'estime qu'une réponse de travail est appropriée pour aider quiconque a besoin de ce genre de mise en oeuvre.

j'utilise la configuration de logback suivante pour fournir un log HTML, relayé par date et filesize, ainsi que la journalisation à la console pour déboguer la sortie.

les Logfiles sont stockés dans un logs répertoire avec un nom de logFile.html alors qu'il est actif, et logFile.2013-mm-dd.i.html quand il se renverse, où i est le nombre de fichiers journaux de 50 Mo. Pour 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>
94
répondu Robert H 2016-01-06 16:01:53

depuis logback 1.1.7 (sorti en mars 2016) un nouvel 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 ici pour plus d'infos.

38
répondu AndreLDM 2018-02-07 16:31:06

vous devriez pouvoir configurer votre journal de bord en utilisant un gestionnaire de fichiers.

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 lorsqu'il atteint cette limite.

-4
répondu Freiheit 2010-04-08 18:26:40