android logback不会基于时间推送策略

时间:2016-04-26 11:12:21

标签: android logback

我使用android logback写入内部文件夹。

我的记录器配置如下所示:

<configuration debug='true'>
<property name="LOG_DIR" value="logs" />

<appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
    <tagEncoder>
        <pattern>%logger{12} %-5level</pattern>
    </tagEncoder>
    <encoder>
        <pattern>%msg</pattern>
    </encoder>
</appender>


<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- active log file -->
    <file>${LOG_DIR}/log.txt</file>
    <encoder>
        <pattern>%d{dd.MM HH:mm:ss.SSS} - %msg%n</pattern>
    </encoder>

    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

        <fileNamePattern>${LOG_DIR}/log-%d{yyyy-MM-dd-HH-mm}.txt</fileNamePattern>

        <maxHistory>4</maxHistory>
    </rollingPolicy>
</appender>

<root level="INFO">
    <appender-ref ref="logcat"/>
    <appender-ref ref="FILE" />
</root>
</configuration>

文件名模式“log-%d {yyyy-MM-dd-HH-mm} .txt”应该为每分钟创建一个新的日志文件(因为分钟是最小的单位)。 回滚被触发,但它失败了,调试消息只是说:

|-WARN in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - RolloverFailure occurred. Deferring rollover

log.txt文件写得正确,但在翻转时失败。 我正在写入内部存储,因此权限没有问题(我也已经在外部SD卡上写了许可)。

编辑:我刚用外部sd测试它作为日志目的地,它似乎工作。因此,似乎logback可以将实际日志文件写入内部存储但不能翻转(可能是由于错误的访问权限?)。

有没有人知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

fileNamePattern中的RollingFileAppender必须是绝对路径,否则它[错误地]遍历根目录的翻转文件路径(即/logs)。您可以通过将LOG_DIR属性设置为/data/data/<package-name>/files/logs来解决问题。

似乎另一位用户报告了这个issue