2016-04-26 83 views
0

我正在使用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> 

文件名模式 “对数%d {YYYY-MM-DD-HH-毫米} .TXT” 应当为每分钟创建一个新的日志文件(因为分钟是最小的单位)。 回滚被触发,但它失败和调试消息只是说:

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

的log.txt文件编写正确的,但它的翻转失败。 我正在写入内部存储器,所以权限是没有问题的(我也有外部SD卡权限的写作)。

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

有没有人有一个想法如何解决这个问题?

回答

1

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


看来另一个用户报告了这个确切的issue

+0

thx。对于其他用户来说,最好的方式似乎是(如您在该问题中回答的): \t $ {DATA_DIR} /log/currentlog.txt 作为当前日志以及翻转文件的位置东东。 – stamanuel

+0

['$ {DATA_DIR}'](https://github.com/tony19/logback-android/issues/110#issuecomment-196305259)是'/ data/data//files的特殊变量'。设置'LOG_DIR'将有效地产生相同的结果。 – 2016-04-27 07:27:46