2016-02-07 109 views
7

我正在一個項目中記錄一堆文件中的東西,我希望確保我的日誌文件在達到文件的固定限制後立即生效。我有一個低於logback.xml文件,但它看起來像文件大小不起作用。我看到我的文件大小爲793M,但限制我已經是100M如何根據文件大小保持滾動日誌文件?

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

我在這裏做什麼錯?在採伐方面,我們應該遵循什麼樣的最佳政策?我們在一個文件中記錄了一堆東西,我們不想用這個日誌文件填滿磁盤。

回答

7

而不是FileAppender,您應該使用RollingFileAppender。 請參閱:http://logback.qos.ch/manual/appenders.html

您正在指定旨在由RollingFileAppender使用並被FileAppender忽略的設置/屬性。

對於一個很好的例子使用和配置,參考此鏈接:使用RollingFileAppender進行和是ConsoleAppender http://examples.javacodegeeks.com/enterprise-java/logback/logback-rollingfileappender-example/

樣品logback.xml。 RollingFileAppender同時具有以下尺寸和時間:

<?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

感謝您的示例。最後你有'root level = DEBUG'這是什麼意思一般?如果我使用'INFO',而不是'DEBUG',那麼會發生什麼? – john

+0

將根級別設置爲調試意味着默認情況下,您希望將所有log.debug()調用輸出到文件。如果將其設置爲INFO,則不會在文件中看到DEBUG日誌語句。在Production環境中,通常會將日誌級別提高到WARN以減少輸出的日誌量。我通常在生產環境中使用INFO,並發現這已經足夠了。您可以在您的配置中添加特定的元素以'覆蓋'默認值: pczeus

+0

讓我知道這是否解決您的問題,並接受它作爲答案。祝你好運! – pczeus