Java 在外部存储器(SD卡)上写入日志时,如何安全使用android-logging-log4j?
作为一个长期使用log4j的用户,在这个项目的帮助下发现log4j可以在Android上使用真的很高兴 对于我目前的Android项目,我正在向logcat和SD卡上的文件写入日志,日志文件对我的项目非常有价值 但我的beta测试用户最近的一些反馈显示,如果在我的应用程序写入日志时移除SD卡,将导致强制关闭 我目前的解决方案是在首次使用log4j时检测是否安装了外部存储器;如果未检测到外部存储,我将禁用日志文件输出Java 在外部存储器(SD卡)上写入日志时,如何安全使用android-logging-log4j?,java,android,logging,log4j,sd-card,Java,Android,Logging,Log4j,Sd Card,作为一个长期使用log4j的用户,在这个项目的帮助下发现log4j可以在Android上使用真的很高兴 对于我目前的Android项目,我正在向logcat和SD卡上的文件写入日志,日志文件对我的项目非常有价值 但我的beta测试用户最近的一些反馈显示,如果在我的应用程序写入日志时移除SD卡,将导致强制关闭 我目前的解决方案是在首次使用log4j时检测是否安装了外部存储器;如果未检测到外部存储,我将禁用日志文件输出 import java.io.File; import org.apache.
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周围做一个包装,并在那里实现存储检测逻辑?我会让log4j将日志发送到服务器上的侦听器。唯一的问题是
如果远程服务器关闭,日志记录请求就会被删除 您可以始终侦听SD卡事件并相应地重新配置log4j
<receiver android:name="com.project.events.SdCardEventListener" >
<intent-filter>
<action android:name="android.intent.action.MEDIA_REMOVED" />
<action android:name="android.intent.action.MEDIA_MOUNTED" />
</intent-filter>
</receiver>
这将允许您在卸下SD卡时重新配置log4j(在再次插入SD卡之前,您可能可以使用设备内部存储器)
SdCardEventListener
应该扩展BroadcastReceiver
,然后根据需要重新配置记录器。谢谢,对于仅前台使用的应用程序,这可能是合适的,但我当前的应用程序(大量使用后台服务)偶尔会生成日志,这是不可取的。因为如果网络是需要一直收集有意义的日志,这会对设备的用电造成很大的问题。不管怎样,Android上的网络大部分时间都在运行,我看不出这是一个什么问题。嗨,@hd1,空闲网络和活动网络的用电差异很大,你可以试试Android 4.0附带的内置电能表+.无论如何,谢谢你的想法,我肯定会在我的下一个应用程序上试用。谢谢,我现在已经在跟踪这条线索,它看起来很有希望。