安卓Android如何手机程序崩溃日志并上传到服务器呢?直接会用到Thread线程里面的UncaughtExceptionHandler接口方法,我们可以自定义一个类CrashHandler,代码如下:
package com.tpyyes; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.lang.Thread.UncaughtExceptionHandler; import java.util.Date; import android.content.Context; import android.os.Environment; import android.util.Log; public class CrashHandler implements UncaughtExceptionHandler { private static CrashHandler instance; public static CrashHandler getInstance() { if (instance == null) { instance = new CrashHandler(); } return instance; } public void init(Context ctx) { Thread.setDefaultUncaughtExceptionHandler(this); } /** * 核心方法,当程序crash 会回调此方法, Throwable中存放这错误日志 */ @Override public void uncaughtException(Thread arg0, Throwable arg1) { String logPath; if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { //logPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + File.separator + "log"; logPath = "/sdcard/Download/"; File file = new File(logPath); if (!file.exists()) { file.mkdirs(); } try { FileWriter fw = new FileWriter(logPath + File.separator + "errorlog.log", true); fw.write(new Date() + "\n"); // 错误信息 // 这里还可以加上当前的系统版本,手机型号,MAC地址 等等信息 StackTraceElement[] stackTrace = arg1.getStackTrace(); fw.write(arg1.getMessage() + "\n"); for (int i = 0; i < stackTrace.length; i++) { fw.write("file:" + stackTrace[i].getFileName() + " class:" + stackTrace[i].getClassName() + " method:" + stackTrace[i].getMethodName() + " line:" + stackTrace[i].getLineNumber() + "\n"); } fw.write("\n"); fw.close(); // 上传错误信息到服务器 // uploadToServer(); } catch (IOException e) { Log.e("crash handler", "load file failed...", e.getCause()); } } arg1.printStackTrace(); android.os.Process.killProcess(android.os.Process.myPid()); } }
如何在Android程序中使用我们自定义的程序崩溃日志呢?只需要在程序入口MainActivity类中的onCreate方法中加入如下代码即可:
//全局异常捕获 CrashHandler crashHandler = CrashHandler.getInstance(); crashHandler.init(getApplicationContext());
至于上传生成的errorlog.log日志文件如何上传,就和普通的Java文件上传是一样的,等再onCreate方法中生成之后,就调用上传文件的方法即可,这里不再赘述。