Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将应用程序日志保存到文本文件不起作用_Android_Logging - Fatal编程技术网

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

Android 将应用程序日志保存到文本文件不起作用,android,logging,Android,Logging,我想将我的android应用程序日志保存在一个文本文件中,并通过电子邮件发送,以便处理异常和反馈。我在应用程序中实现了以下代码,但日志文本文件不包含任何内容,并且在执行代码后为空 try { Process process = Runtime.getRuntime().exec("logcat -d"); BufferedReader bufferedReader = new BufferedReader( new InputStr

我想将我的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.I
Log.e
Log.w
将日志消息写入logcat

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

试试这个

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.i
Log.e
Log.w
,请尝试此方法

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.i
Log.e
Log.w

尝试解释更改,以便其他人稍后检查您的答案时能够理解我不明白为什么要将
过程
用于附加日志?实际上,当您使用
BufferedWriter
时,它会包装现有的Writer并缓冲输出。因此,无需使用
过程
和其他方法。只需获取文件并在以前的日志中写入(附加)您的日志。@AbhishekPatel感谢您的快速回答。我使用这个进程访问系统日志。根据您的回答,我将无法跟踪未处理的异常甚至崩溃。只能监视附加的日志。请尝试解释更改,以便其他人稍后检查您的答案时能够理解。我不明白您为什么使用
过程
附加日志?实际上,当您使用
BufferedWriter
时,它会包装现有的Writer并缓冲输出。因此,无需使用
过程
和其他方法。只需获取文件并在以前的日志中写入(附加)您的日志。@AbhishekPatel感谢您的快速回答。我使用这个进程访问系统日志。根据您的回答,我将无法跟踪未处理的异常甚至崩溃。只能监视附加的日志。