2011-07-27 22 views
1

microlog4androidを使用してファイルにログインしています。問題は、最大ファイルサイズをどのように設定できるかです。ログファイルの最大サイズをandroidに設定する方法

microlog4android FileAppenderクラスには、getLogSize(常に-1を返す)とクリアの2つのメソッドがあります。特定のサイズに達するとログをクリアできますが、getLogSizeは機能していないようです。

私が気付いていない、より優れた、より成熟したアンドロイドロギングソリューションがありますか?

答えて

4

あなたはRollingFileAppenderSizeBasedTriggeringPolicylogback-androidを使用できますが、最大ファイルサイズを超えて作業ログファイルを引き起こす可能性がありbugsrc)に注意する必要があります。回避策は、バグを回避するためにトリガーポリシーをサブクラス化することです。

package com.example; 

import java.io.File; 
import ch.qos.logback.core.util.FileSize; 

public class SizeBasedTriggeringPolicy<E> extends ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy<E> { 
    @Override 
    public boolean isTriggeringEvent(final File activeFile, final E event) { 
     return (activeFile.length() >= FileSize.valueOf(getMaxFileSize()).getSize()); 
    } 
} 


ここでは、あなたのAndroidManifest.xmlに入れることができます例の設定(Logback manualに基づいており、上記の回避策を含む)があります。私はAndroid 4.0.3エミュレータでこれをテストしましたが、以前のバージョンでも動作すると思いました。

<logback> 
    <configuration debug="true"> 
     <appender 
       name="LOGCAT" 
       class="ch.qos.logback.classic.android.LogcatAppender" > 
      <encoder> 
       <pattern>[%method] %msg%n</pattern> 
      </encoder> 
     </appender> 

     <property name="dest.dir" value="/sdcard/test/" /> 
     <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>${dest.dir}/test.log</file> 
      <append>false</append> 

      <!-- ######################################### 
       # Max of 2 backup zip's (plus uncompressed 
       # working file, ${dest.dir}/test.log) 
       ######################################### --> 
      <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
       <fileNamePattern>${dest.dir}/test.%i.log.zip</fileNamePattern> 
       <minIndex>1</minIndex> 
       <maxIndex>2</maxIndex> 
      </rollingPolicy> 

      <!-- ######################################### 
       # Rollover when file size reaches 5MB. 
       # We're using our custom policy here that 
       # works around a bug (LBCORE-123). 
       ######################################### --> 
      <!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">--> 
      <triggeringPolicy class="com.example.SizeBasedTriggeringPolicy"> 
       <maxFileSize>5MB</maxFileSize> 
      </triggeringPolicy> 
      <encoder> 
       <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern> 
      </encoder> 
     </appender> 

     <logger name="com.example.HelloAndroidActivity" level="TRACE"> 
      <appender-ref ref="FILE" /> 
     </logger> 

     <root level="DEBUG" > 
      <appender-ref ref="LOGCAT" /> 
     </root> 
    </configuration> 
</logback> 
+0

非常に良い情報です。どういうわけか、あなたが上記のことをした後、私はまだファイルをローリングさせることができませんでした。私はSizeBasedTriggeringPolicy にブレークポイントを設定しました。私はコールバックを受け取ってリターンすることができました。しかし、ファイルはローリングしていません。理由は分かりません。 – windfly2006

0

通常のFile apisを使用してファイルの長さを取得し、サイズ制限を超えた場合にLoggerを初期化する前に削除/名前を変更することができます。

関連する問題