2011-07-27 103 views
1

我正在使用microlog4android來登錄到文件。問題是如何設置最大文件大小?我如何在Android上設置日誌文件最大大小

microlog4android FileAppender類有兩個方法:getLogSize(總是返回-1)並清除。我可以清除日誌,當它達到一定的大小,但getLogSize似乎不工作。

有沒有更好,更成熟的android日誌解決方案,我不知道?

回答

4

您可以使用logback-androidRollingFileAppenderSizeBasedTriggeringPolicy,但你應該知道的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()); 
    } 
} 


下面是一個例子配置(基於的logback manual和包括上述解決方法),你可以把你的AndroidManifest.xml。我在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 處設置了一個斷點,我可以接到回電,並且返回結果爲true。但文件不滾動。不知道爲什麼。 – windfly2006

0

可能是您可以使用普通文件apis檢索文件長度,然後在初始化Logger之前刪除/重命名它,如果它超過大小限制。

相關問題