Как получить журнал ошибок из процесса Android и когда вызвать метод get error log?
Я реализовал попытку поймать исключение возможных мест. Существуют разные другие исключения, которые будут выброшены ОС Android [База данных исключения, разрешения и другие исключения]. Я хочу записать эти данные журнала ошибок в файл {только в нашем приложении происходит сбой}.
У меня уже есть код для записи данных в файл. Я просто хочу знать, как получить журнал ошибок от процесса Android.
В случае сбоя экземпляр приложения недоступен. И я не знаю точное место, где можно вызвать метод журнала ошибок. на этом. Пожалуйста помоги мне с этим.
1 ответ
В вашем классе приложения вы можете инициализировать необработанное исключение. Метод обратного вызова будет иметь бросаемый объект. Из этого объекта мы можем получить данные журнала сбоев, а затем те же данные, которые будут записаны в файл.
Класс применения:
public class MyApplication extends Application {
// uncaught exception handler variable
private UncaughtExceptionHandler defaultUEH;
public MyApplication() {
defaultUEH = Thread.getDefaultUncaughtExceptionHandler();
// setup handler for uncaught exception
Thread.setDefaultUncaughtExceptionHandler(_unCaughtExceptionHandler);
}
// handler listener
private Thread.UncaughtExceptionHandler _unCaughtExceptionHandler = new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread thread, Throwable ex) {
//To write the crash log data to file
AppUtil.getInstance().writeActivityLogToFile(true,
getErrorMessgae(ex));
// re-throw critical exception further to the os (important) to handle
defaultUEH.uncaughtException(thread, ex);
// System.exit(2);
}
};
/**
* To get the crash log message from throwable object
*
* @param e
* - throwable exception object
* @return - the crash log
*/
private String getErrorMessgae(Throwable e) {
StackTraceElement[] stackTrackElementArray = e.getStackTrace();
String crashLog = e.toString() + "\n\n";
crashLog += "--------- Stack trace ---------\n\n";
for (int i = 0; i < stackTrackElementArray.length; i++) {
crashLog += " " + stackTrackElementArray[i].toString() + "\n";
}
crashLog += "-------------------------------\n\n";
// If the exception was thrown in a background thread inside
// AsyncTask, then the actual exception can be found with getCause
crashLog += "--------- Cause ---------\n\n";
Throwable cause = e.getCause();
if (cause != null) {
crashLog += cause.toString() + "\n\n";
stackTrackElementArray = cause.getStackTrace();
for (int i = 0; i < stackTrackElementArray.length; i++) {
crashLog += " " + stackTrackElementArray[i].toString()
+ "\n";
}
}
crashLog += "-------------------------------\n\n";
return crashLog;
}
}
Объявите класс приложения в своем манифесте в следующем теге:
<application
android:name=".application.FleetLOCApplication"
......>