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

zir*_*ael 2 logging android

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

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

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

小智 5

您可以使用的logback-机器人RollingFileAppenderSizeBasedTriggeringPolicy,但你应该意识到的错误(SRC,可能会使您的工作日志文件超过最大文件大小).解决方法是将触发策略子类化以绕过该错误:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)


这是一个示例配置(基于Logback 手册,包括上面的解决方法),您可以将其放入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>
Run Code Online (Sandbox Code Playgroud)