作为一个长期使用 log4j 的用户,在这个项目https://code.google.com/p/android-logging-log4j/的帮助下发现 log4j 在 Android 上可用真的很开心
对于我当前的 Android 项目,我将日志写入 logcat 和 SD 卡上的文件,日志文件对我的项目具有很大的价值。
但是最近我的 beta 测试用户的一些反馈显示,如果在我的应用程序写入日志时移除 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 做一个包装,并在那里实现存储检测逻辑?