2011-07-27 123 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之前删除/重命名它,如果它超过大小限制。

相关问题