Suraj Gautham
Suraj Gautham

Reputation: 1

How do I save app logs locally on Android?

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?

Upvotes: 0

Views: 1841

Answers (2)

citycity
citycity

Reputation: 71

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/

Upvotes: 0

TylerQITX
TylerQITX

Reputation: 328

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.

Upvotes: 0

Related Questions