首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在外部存储(SD-Card)上写入日志时,如何安全地使用android-logging-log4j?

在外部存储(SD-Card)上写入日志时,如何安全地使用android-logging-log4j?
EN

Stack Overflow用户
提问于 2013-01-23 11:57:08
回答 2查看 2.5K关注 0票数 3

作为一个长期使用log4j的用户,在这个项目https://code.google.com/p/android-logging-log4j/的帮助下,发现log4j在安卓上是可用的,我真的很高兴

对于我目前的Android项目,我正在将日志写到logcat和SD-Card上的一个文件中,日志文件对我的项目非常有价值。

但我的beta测试用户最近的一些反馈显示,如果在我的应用程序写入日志时SD卡被移除,将导致强制关闭。

我目前的解决方案是在第一次使用log4j时检测是否挂载了外部存储;如果没有检测到外部存储,我将禁用日志文件输出。

代码语言:javascript
复制
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做一个包装器,并在那里实现存储检测逻辑?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-23 13:38:44

您可以随时侦听SD卡事件并相应地重新配置log4j。

代码语言:javascript
复制
<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,然后根据需要重新配置记录器。

票数 3
EN

Stack Overflow用户

发布于 2013-01-23 12:00:06

我会让log4j向监听你的服务器的SocketAppender发送日志。唯一的问题是If the remote server is down, the logging requests are simply dropped

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14472198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档