Search code examples
javaandroidloggingandroid-logcatacra

How to disable the logging of ACRA


I'm using ACRA for crash reporting in my app. (In brief, ACRA is a tool for sending crash reports to the developer.)

Even in release builds, I can see its logs in the device's logcat (for example when it sends a crash report, it sends many log lines with "ACRA" tag).

Is there a way to disable its logging?

Based on the comments below, let me emphasize again: I'm asking to disable the logging of ACRA itself. The question has nothing to do with ACRA's crashing or with the system logcat during app crashes.

I think the best is to provide an example about what I mean:

04-13 02:33:50.980: D/ACRA(4560): Using custom Report Fields
04-13 02:33:51.170: I/ACRA(4560): READ_LOGS not allowed. ACRA will not include LogCat and DropBox data.
04-13 02:33:51.170: D/ACRA(4560): Writing crash report file 1667311131000.stacktrace.
04-13 02:33:51.200: D/ACRA(4560): About to start ReportSenderWorker from #handleException
04-13 02:33:51.200: D/ACRA(4560): Waiting for Toast + worker...

Solution

  • To disable ACRA's logging, you might want to use this implementation of the ACRALog interface:

    public class NoAcraLog implements ACRALog {
    
        @Override
        public int v(String tag, String msg) {
            return 0;
        }
    
        @Override
        public int v(String tag, String msg, Throwable tr) {
            return 0;
        }
    
        @Override
        public int d(String tag, String msg) {
            return 0;
        }
    
        @Override
        public int d(String tag, String msg, Throwable tr) {
            return 0;
        }
    
        @Override
        public int i(String tag, String msg) {
            return 0;
        }
    
        @Override
        public int i(String tag, String msg, Throwable tr) {
            return 0;
        }
    
        @Override
        public int w(String tag, String msg) {
            return 0;
        }
    
        @Override
        public int w(String tag, String msg, Throwable tr) {
            return 0;
        }
    
        @Override
        public int w(String tag, Throwable tr) {
            return 0;
        }
    
        @Override
        public int e(String tag, String msg) {
            return 0;
        }
    
        @Override
        public int e(String tag, String msg, Throwable tr) {
            return 0;
        }
    
        @Override
        public String getStackTraceString(Throwable tr) {
            return null;
        }
    }
    

    Provide an instance of this class to ACRA:

    ACRA.setLog(new NoAcraLog());
    

    This should disable all logging of ACRA since the abovementioned implementation would do nothing. (FYI: normally ACRA uses AndroidLogDelegate which redirects log messages to the Log class.)