How do I save app logs locally on Android?

1.2k Views Asked by At

I want to save the logs generated by my application locally on the android device and view them in an instance of a crash. Using the "Take Bug Report" under the developer options gives the entire system logs which are irrelevant to me. I am looking only for those logs created by my application when it runs. Is there any application that does this? Or are there any libraries I could include in my application code to satisfy my requirement?

2

There are 2 best solutions below

0
TylerQITX On

You may just add firebase to your project, and everything will be done automatically.
Or if need it to be "locally", can use the Thread.UncaughtExceptionHandler to save crash log. Register it when your application onCreate.

private static UncaughtExceptionHandler mDefaultUncaughtExceptionHandler;

public static void registerUncaughtExceptionHandler() {
    mDefaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
    Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() {
        public void uncaughtException(Thread thread, Throwable ex) {
            // Save Log
            saveLog(ex);

            // Throw system
            mDefaultUncaughtExceptionHandler.uncaughtException(thread, ex);
        }
    });
}

private static void saveLog(Throwable exception) {
    try {
        String stackTrace = Log.getStackTraceString(exception);
        // Save it to SharedPreferences or DB as you like
    } catch (Exception e) {
    }
}

Then can extract the last crash log, submit to your server or display in logcat when app starts.

0
citycity On

You can try this

   fun writeLog(context: Context) {
        try {
            val path = File(context.filesDir, "log_files")
            if (!path.exists()) {
                path.mkdir()
            }

            val fileName = "your_filename.txt"

            Runtime.getRuntime().exec("logcat -v time -f $fileName")
        } catch (e: IOException) {

        }
    }

Or you can change logcat command based on your requirements: refer to this https://developer.android.com/studio/command-line/logcat

You can check it at data/data/{applicationId}/files/log_files/