長年の log4j ユーザーとして、このプロジェクトhttps://code.google.com/p/android-logging-log4j/の助けを借りて log4j が Android で利用可能であることを見つけるのは本当に楽しいことです。
私の現在の Android プロジェクトでは、logcat と SD カード上のファイルの両方にログを書き込んでおり、ログ ファイルは私のプロジェクトにとって非常に価値があります。
しかし、ベータ テスト ユーザーからの最近のフィードバックによると、アプリケーションがログを書き込んでいる間に SD カードが取り外されると、強制終了が発生することが明らかになりました。
私の現在の解決策は、log4j が最初に使用されたときに外部ストレージがマウントされているかどうかを検出することです。外部ストレージが検出されない場合は、ログ ファイルの出力を無効にします。
import java.io.File;
import org.apache.log4j.Level;
import android.os.Environment;
import de.mindpipe.android.logging.log4j.LogConfigurator;
public class ConfigureLog4j {
private static boolean configured = false;
public static void configure() {
if (configured == true) {
return;
}
String status = Environment.getExternalStorageState();
final LogConfigurator logConfigurator = new LogConfigurator();
if (status.equals(Environment.MEDIA_MOUNTED)) {
logConfigurator.setUseFileAppender(true);
logConfigurator.setFileName(Environment.getExternalStorageDirectory() + File.separator + "msgant.log");
} else {
logConfigurator.setUseFileAppender(false);
}
logConfigurator.setRootLevel(Level.DEBUG);
// Set log level of a specific logger
logConfigurator.setLevel("org.apache", Level.ERROR);
logConfigurator.configure();
configured = true;
}
}
これは完璧な解決策にはほど遠いものであり、実際には、log4j のクラッシュに関する現在の問題は解決されません。ユーザーがいつ SD カードをアンマウントしようとするかを判断できないからです。
または、log4j のラッパーを作成し、そこにストレージ検出ロジックを実装する必要がありますか?