作为一个长期使用log4j的用户,在这个项目https://code.google.com/p/android-logging-log4j/的帮助下,发现log4j在安卓上是可用的,我真的很高兴
对于我目前的Android项目,我正在将日志写到logcat和SD-Card上的一个文件中,日志文件对我的项目非常有价值。
但我的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做一个包装器,并在那里实现存储检测逻辑?
发布于 2013-01-23 13:38:44
您可以随时侦听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>这将允许您在移除卡时重新配置log4j (您可能可以使用设备内部存储,直到再次插入SD卡。
SdCardEventListener应该扩展BroadcastReceiver,然后根据需要重新配置记录器。
发布于 2013-01-23 12:00:06
我会让log4j向监听你的服务器的SocketAppender发送日志。唯一的问题是If the remote server is down, the logging requests are simply dropped。
https://stackoverflow.com/questions/14472198
复制相似问题