Android 获取APP崩溃日志并写入本地

在Application中加入一下代码

Java:

        //获取崩溃信息
        final Thread.UncaughtExceptionHandler defaultHandler = Thread.getDefaultUncaughtExceptionHandler();
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread thread, Throwable throwable) {
                //获取崩溃时的UNIX时间戳
                long timeMillis = System.currentTimeMillis();
                //时间戳转换
                StringBuilder stringBuilder = new StringBuilder(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date(timeMillis)));
                stringBuilder.append(":\n");
                //获取错误信息
                stringBuilder.append(throwable.getMessage());
                stringBuilder.append("\n");
                //获取堆栈信息
                StringWriter sw = new StringWriter();
                PrintWriter pw = new PrintWriter(sw);
                throwable.printStackTrace(pw);
                stringBuilder.append(sw.toString());
                //拿到的错误信息
                String errorLog = stringBuilder.toString();
                //写入文件
                writeLog(errorLog)

                //如何处理该崩溃,下面使用默认的处理方式让APP停止运行
                defaultHandler.uncaughtException(thread, throwable);
            }
       });

Kotlin:

        val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
        Thread.setDefaultUncaughtExceptionHandler { thread, throwable -> //获取崩溃时的UNIX时间戳
            val timeMillis = System.currentTimeMillis()
            //时间戳转换
            val stringBuilder = StringBuilder(SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(Date(timeMillis)))
            stringBuilder.append(":\n")
            //获取错误信息
            stringBuilder.append(throwable.message)
            stringBuilder.append("\n")
            //获取堆栈信息
            val sw = StringWriter()
            val pw = PrintWriter(sw)
            throwable.printStackTrace(pw)
            stringBuilder.append(sw.toString())
            //拿到的错误信息
            val errorLog: String = stringBuilder.toString()
            //写入文件
            writeLog(errorLog)

            //如何处理该崩溃,下面使用默认的处理方式让APP停止运行
            // defaultHandler.uncaughtException(thread, throwable)
        }

writeLog方法:

        /*
         *作者:赵星海 CSDN-深海呐 
         *时间:2021/3/13 11:44
         *用途:日志写入文件, 文件名:LOG.txt
         */
        fun writeLog(text: String?) {
            var textR = SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(Date().time) + " " + text + "\r\n"
            try {
                var fos = FileOutputStream("LOG.txt", true)
                fos.write(textR.toByteArray())
                fos.close()
            } catch (e: FileNotFoundException) {
                e.printStackTrace()
            } catch (e: IOException) {
                e.printStackTrace()
            }
        }

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/116294142