2016-02-07 28 views
7

Sto lavorando a un progetto in cui sto registrando un sacco di cose in un file e voglio assicurarmi che il mio file di registro venga riavviato non appena viene raggiunto un limite fisso per il file. Ho un file sotto logback.xml ma sembra che la dimensione del file non funzioni. Vedo la mia dimensione del file da 793 milioni, ma limitare ho è 100MCome mantenere il file di registro a rotazione come per dimensione del file?

<configuration> 
    <appender name="FILE" class="ch.qos.logback.core.FileAppender"> 
     <file>process.log</file> 
     <triggeringPolicy 
      class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
      <maxFileSize>100MB</maxFileSize> 
     </triggeringPolicy> 
     <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
      <fileNamePattern>process%i.log</fileNamePattern> 
      <minIndex>1</minIndex> 
      <maxIndex>9</maxIndex> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %level [%thread] %msg%n</pattern> 
      <!-- this improves logging throughput --> 
      <immediateFlush>true</immediateFlush> 
     </encoder> 
    </appender> 

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

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

Che male sto facendo qui? E anche qual è la politica migliore che dovremmo seguire nella produzione in termini di registrazione? Stiamo registrando un sacco di cose in un file e non vogliamo riempire il disco con questo file di registro.

risposta

7

Invece di FileAppender, dovresti utilizzare RollingFileAppender. Vedi: http://logback.qos.ch/manual/appenders.html

Si stanno specificando le impostazioni/proprietà che devono essere utilizzate da RollingFileAppender e ignorate da FileAppender.

Per un buon esempio di utilizzo e configurazione, fare riferimento a questo link: http://examples.javacodegeeks.com/enterprise-java/logback/logback-rollingfileappender-example/

logback.xml di esempio utilizzando un RollingFileAppender e ConsoleAppender. Il RollingFileAppender ha dimensioni e tempi:

<?xml version="1.0" encoding="UTF-8"?> 
    <configuration scan="true"> 
     <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> 
      <encoder> 
       <charset>UTF-8</charset> 
       <Pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</Pattern> 
      </encoder> 
     </appender> 

     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>/srv/logs/application.log</file> 

      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern> 
       <maxHistory>30</maxHistory> 
      </rollingPolicy> 

      <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
       <maxFileSize>5MB</maxFileSize> 
      </triggeringPolicy> 

      <encoder> 
       <charset>UTF-8</charset> 
       <pattern>%d %-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
      </encoder> 
     </appender> 

     <root level="DEBUG"> 
      <appender-ref ref="consoleAppender" /> 
      <appender-ref ref="FILE"/> 
     </root> 
    </configuration> 
+0

Grazie per il tuo esempio. Alla fine hai 'root level = DEBUG' che cosa significa in generale? Invece di 'DEBUG' se lo faccio' INFO', allora cosa succederà? – john

+0

L'impostazione del livello di root per il debug significa che per impostazione predefinita si desidera che tutte le chiamate di log.debug() vengano inviate al file. Se lo imposti su INFO, non vedrai le istruzioni del registro DEBUG nel tuo file. È comune in un ambiente di produzione aumentare il livello del registro in WARN più in alto per ridurre la quantità di registrazione che viene prodotta. Di solito uso INFO nella produzione e trovo che sia sufficiente. Puoi aggiungere specifici elementi nella tua configurazione per "sovrascrivere" il valore predefinito: pczeus

+0

Fammi sapere se questo risolve il tuo problema e lo accetti come risposta se lo fa . In bocca al lupo! – pczeus

Problemi correlati