Как я могу установить максимальный размер файла журнала на Android - PullRequest
2 голосов
/ 27 июля 2011

Я использую microlog4android для входа в файл. Вопрос в том, как установить максимальный размер файла?

microlog4android Класс FileAppender имеет два метода: getLogSize (который всегда возвращает -1) и clear. Я могу очистить журнал, когда он достигнет определенного размера, но getLogSize, похоже, не работает.

Есть ли какое-нибудь лучшее, более зрелое решение для ведения журнала Android, о котором я не знаю?

Ответы [ 2 ]

5 голосов
/ 04 января 2012

Вы можете использовать log-android с RollingFileAppender и SizeBasedTriggeringPolicy, но вы должны знать о ошибка ( 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>
0 голосов
/ 05 сентября 2011

Может быть, вы можете использовать обычный файл apis для получения длины файла, а затем удалить / переименовать его перед инициализацией Logger, если он превышает предельный размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...