2016-04-26 6 views
0

内部フォルダに書き込むためにアンドロイドログバックを使用しています。時間ベースのポリシーでアンドロイドログバックがロールオーバーしない

私のロガーの設定は次のようになります。

<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-MM} .txtの" 分ごとに新しいログファイルを作成する必要があります(分は最小単位なので)。 ロールバックがトリガーが、それが失敗し、デバッグメッセージがちょうど言うされています

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

log.txtファイルが正しく書かれているが、それはロールオーバーに失敗しました。 私は内部ストレージに書き込んでいるので、パーミッションに問題はありません(また、すでに外部のSDカードへの書き込みも許可されています)。

編集:ログの出力先として外部sdでテストしたところ、うまくいきました。したがって、ログバックは実際のログファイルを内部ストレージに書き込むことができますが、ロールオーバーはできません(おそらく間違ったアクセス権のためでしょうか?)。

これを修正する方法はありますか?

答えて

1

RollingFileAppenderfileNamePatternは、絶対パスである必要があります。そうしないと、ルートディレクトリからロールオーバーファイルパス([/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'を設定すると効果的に同じ結果が得られます。 –

関連する問題