2016-02-07 25 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'というのは一般的にどういう意味ですか? 'DEBUG'の代わりに' INFO'とすれば何が起こるでしょうか? – john

+0

ルートレベルをデバッグに設定すると、デフォルトですべてのlog.debug()呼び出しをfileに出力することができます。 INFOに設定すると、ファイルにDEBUGログステートメントが表示されません。プロダクション環境では、出力されるロギングの量を減らすためにログレベルをWARNより高くすることが一般的です。私は一般的に自分自身でINFOを使用し、それが十分であることを見いだします。 pczeus

+0

あなたの問題を解決するかどうか教えてください。 。がんばろう! – pczeus

関連する問題