如何在android上设置日志文件最大大小

时间:2011-07-27 10:23:22

标签: android logging

我正在使用microlog4android来登录文件。问题是如何设置最大文件大小?

microlog4android FileAppender类有两个方法:getLogSize(总是返回-1)和clear。我可以在达到一定大小时清除日志,但getLogSize似乎不起作用。

有没有更好,更成熟的Android日志记录解决方案,我不知道?

2 个答案:

答案 0 :(得分:5)

您可以对logback-androidRollingFileAppender使用 SizeBasedTriggeringPolicy ,但是您应该知道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>

答案 1 :(得分:0)

可能您可以使用普通的File apis来检索文件长度,然后在初始化Logger之前删除/重命名它,如果它超出了大小限制。