【问题标题】:How can I set log file max size on android如何在android上设置日志文件最大大小
【发布时间】:2011-07-27 10:23:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: android logging


    【解决方案1】:

    您可以将 logback-androidRollingFileAppenderSizeBasedTriggeringPolicy 一起使用,但您应该注意bug (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());
        }
    }
    


    这是一个示例配置(基于 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>
    

    【讨论】:

    • 非常好的信息。不知何故,按照您上面所说的,我仍然无法使文件滚动。我在 SizeBasedTriggeringPolicy 处设置了一个断点,我可以得到回调,并且返回为真。但是文件没有滚动。不知道为什么。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-23
      • 2018-10-19
      • 1970-01-01
      • 2012-01-10
      • 2016-02-08
      • 2016-09-29
      相关资源
      最近更新 更多