首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android中登录到文本文件

在Android中登录到文本文件
EN

Stack Overflow用户
提问于 2018-04-20 18:35:05
回答 2查看 161关注 0票数 0

我不仅需要将我的消息记录到系统日志中(据我所知,系统日志缓冲区非常短,但我需要查看3-5天的日志),而且还需要在一个单独的文本文件中。日志记录必须是异步的。你能给我一个关于在这种情况下我应该使用哪个组件的建议吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-04-20 18:41:03

我希望它能对你有用。

代码语言:javascript
运行
复制
public void appendLog(String text) {
    File logFile = new File("sdcard/log.file");
    if (!logFile.exists()) {
        try {
            logFile.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    try {
        //BufferedWriter for performance, true to set append to file flag
        BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
        buf.append(text);
        buf.newLine();
        buf.close();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

不要忘记在清单中添加android.permission.WRITE_EXTERNAL_STORAGE的权限!

票数 2
EN

Stack Overflow用户

发布于 2018-04-20 19:17:07

异步工作,不需要权限!

只需记住在onCreateMethod中调用应用程序中的初始化方法即可初始化记录器

代码语言:javascript
运行
复制
class Logger {


    private static File logFileLoc;
    private static ExecutorService logExecutor;

    public static void init(Context applicationContext, String logFileName, boolean reCreate) {

        logFileLoc = new File(applicationContext.getCacheDir(), logFileName);

        if (reCreate && logFileLoc.exists()) logFileLoc.delete();

        logExecutor = Executors.newSingleThreadExecutor();
    }

    public static void log(final String tag, final String msg) {

        if (logFileLoc == null) try {

            throw new Exception("First you should call init method in your application");

        } catch (Exception e) {
            e.printStackTrace();
        }

        Log.d(tag, msg);


        logExecutor.execute(new Runnable() {
            @Override
            public void run() {


                try {

                    BufferedWriter writer = new BufferedWriter(new FileWriter(logFileLoc,true));

                    String timeStamp = DateFormat.getDateTimeInstance().format(new Date(System.currentTimeMillis()));

                    writer.append(timeStamp + "  " + tag + "  : " + msg );
                    writer.newLine();

                    writer.flush();

                    writer.close();

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        });

    }

}

你也可以用Timber库做同样的事情,以获得更多信息:

https://medium.com/@vicky7230/file-logging-with-timber-4e63a1b86a66

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

https://stackoverflow.com/questions/49939695

复制
相关文章

相似问题

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