2017-06-07 9 views
1

ログには私のアプリケーションでlogback-androidを使用しています。私はログをsdcardのアプリケーションデータディレクトリのファイルに書き込む必要があります。私は以下のファイルアペンダー設定を使用しました。logback-androidへのsdcardアプリケーションデータディレクトリのパスを指定してください

<appender name="file" class="ch.qos.logback.core.FileAppender"> 
    <file>/sdcard/Android/data/com.my.app/files/app.log</file> 
    <encoder> 
     <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
    </encoder> 
</appender> 

私は次のログファイルの場所を使用していることがわかります。

/sdcard/Android/data/com.my.app/files/app.log

私はまた、以下のようなログファイルの場所を使用することができます。パス上

/storage/emulated/0/Android/data/com.my.app/files/app.log

getExternalFilesDir()によって返されたパスです。

ただし、project wiki pageの例では、次の形式のファイルの場所が使用されています。

/data/data/com.example/files/log/foo.log

上記のパス形式は私の場合は動作しません。以前の2つのパス形式が機能していました。

logback.xmlにアプリケーションデータのディレクトリパスを指定する正しい方法は何ですか?ディレクトリパスは、私が言及した最初の2つのパターンとさまざまなデバイスで異なっていますか?

+0

は動作するパスを使用します。データ/データを忘れる。 –

+0

@RobertRowntree、私は、 '/ data/data'パスが、(ユーザーが見ることのできる外部ファイルディレクトリではなく)sdcardの保護領域にあるアプリケーションのアプリケーションデータディレクトリを指していることに気付きました。とにかく、私の問題は、sdcardのパスパターンがすべてのデバイスで同じかどうかです。私は最終的にプログラムでログファイルのパスを設定することにしました。したがって、ハードコードされたsdcardファイルのパスパターンについて心配する必要はありません。 –

答えて

1

最後に、プログラムでファイルパスを設定することにしました。私のカスタムApplicationクラスのonCreate()に次のコードを追加しました。

LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); 
for (ch.qos.logback.classic.Logger logger : context.getLoggerList()) { 
    for (Iterator<Appender<ILoggingEvent>> index = logger.iteratorForAppenders(); index.hasNext();) { 
     Appender<ILoggingEvent> appender = index.next(); 
     if (appender instanceof FileAppender) { 
      ((FileAppender) appender).setFile(new File(getExternalFilesDir(null), "app.log").getAbsolutePath()); 
      appender.start(); 
     } 
    } 
} 
関連する問題