2016-04-26 56 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