将应用程序日志保存到文本文件不起作用

时间:2016-05-16 07:30:53

标签: android logging

我希望将我的Android应用程序日志保存在文本文件中并通过电子邮件发送,以便处理异常和反馈。我在我的应用程序中实现了以下代码,但是日志文本文件不包含任何内容,在执行代码后为空。

try {
        Process process = Runtime.getRuntime().exec("logcat -d");
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));

        StringBuilder logString = new StringBuilder();
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            logString.append(line);
        }

        File logFile = new File("sdcard/log.txt");
        if (!logFile.exists()) {
            try {
                logFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        BufferedWriter buf = new BufferedWriter(new FileWriter(logFile, true));
        buf.append(logString);
        buf.newLine();
        buf.close();

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

我使用Log.iLog.eLog.w在我的整个应用程序中将日志消息写入logcat。

如果有人引导我解决我的问题,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

试试这个,

public static void appendLog(String text) {
    if (true) {

        File root = android.os.Environment.getExternalStorageDirectory();
        File dir = new File(root.getAbsolutePath() + "/YourAppName");
        dir.mkdir();
        File logFile = new File(dir, "YourAppName.txt");

        if (!logFile.exists()) {
            try {
                logFile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            // BufferedWriter for performance, true to set append to file
            // flag
            BufferedWriter buf = new BufferedWriter(new FileWriter(logFile,
                    true));
            buf.append(text
                    + " - "
                    + new SimpleDateFormat("MM/dd/yyyy HH:mm:ss")
                            .format(new Date()));
            buf.newLine();
            buf.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

并在您的应用中使用此方法代替Log.iLog.eLog.w