【问题标题】:android logback does not rollover on time based policyandroid logback 不会在基于时间的策略上翻转
【发布时间】:2016-04-26 11:12:20
【问题描述】:

我正在使用 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可以将实际的日志文件写入内部存储但不能翻转(可能是由于访问权限错误?)。

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

【问题讨论】:

    标签: android logback


    【解决方案1】:

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


    似乎另一个用户报告了这个确切的issue

    【讨论】:

    • 谢谢。对于其他用户来说,最好的方法似乎是(正如你在那个问题中回答的那样)使用: ${DATA_DIR}/log/currentlog.txt 作为当前日志以及翻车的东西。
    • ${DATA_DIR}/data/data/&lt;package-name&gt;/files 的特殊变量。设置LOG_DIR 将有效地产生相同的结果。
    猜你喜欢
    • 2013-10-18
    • 2022-08-04
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    相关资源
    最近更新 更多