Как получить журнал ошибок из процесса 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"
    ......>
Другие вопросы по тегам