android logback 不会按基于时间的策略滚动
android logback does not rollover on time based policy
我正在使用 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可以将实际的日志文件写入内部存储但不能回滚(可能是由于错误的访问权限?)。
有人知道如何解决这个问题吗?
RollingFileAppender
中的fileNamePattern
必须是绝对路径,否则会[错误]从根目录(即/logs
)遍历翻转文件路径。您可以通过将 LOG_DIR
属性 设置为 /data/data/<package-name>/files/logs
.
来解决示例中的问题
似乎另一个用户报告了这个 issue。
我正在使用 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可以将实际的日志文件写入内部存储但不能回滚(可能是由于错误的访问权限?)。
有人知道如何解决这个问题吗?
RollingFileAppender
中的fileNamePattern
必须是绝对路径,否则会[错误]从根目录(即/logs
)遍历翻转文件路径。您可以通过将 LOG_DIR
属性 设置为 /data/data/<package-name>/files/logs
.
似乎另一个用户报告了这个 issue。