I'm trying to set up my app with firebase+crashlytics for having a better error dashboard.
All the firebase stuff is already working and I'm able to access the features
I tested crashlytics with:
Crashlytics.getInstance().crash(); // Force a crash
and i'm able to see the stack trace on my dashboard (inside firebase)
but I'm trying to log non-fatal messages like:
Crashlytics.log("test");
And it doesn't appear anywhere
I followed the whole instructions at:
https://firebase.google.com/docs/crashlytics/customize-crash-reports
Still doesn't find any dashboard with the "test" messages
Where does it go? what am I missing?
Sending non-debug errors (e.g. your test message) logs to Crashlytics locally, but these exceptions are not uploaded until the app restarts.
As the documentation states:
Crashlytics batches logged exceptions together and sends them the next time the app launches.
This is presumably due to the primary Crashlytics functionality (reporting crashes) working in the same way, and non-fatal errors being a secondary concern using the same code flow.
Whilst this is unfortunate, there are many third party log-collating services that can handle the non-fatal errors.
Note: I'm aware you've received an answer in the comments from Crashlytics, I'm providing a more comprehensive answer for future visitors.
It's an old question any way i wanted to share what happens to messages logged using Crashlytics.log(msg); These logs are not immediately shown to dashboard. Crashlytics stores all the logged messages logged using log(msg) method and uploads it to server when a new Crash or Exception occurs.
You can see these messages in Firebase console under logs section as shown in below image
One more thing if you want to log exceptions there is another method for it Crashlytics.logException(exception)
Crashlytics isn't made for develop logging/debug, it is made to cluster hundreds/thousands of logs from different users at runtime, this may cause delays between the time the log message are recorded and when you will really be able to see them at the dashboard making it unusable for development debug.
If you want to use Crashlytics to follow the code workflow and debug during development, you will need to use the trick in this answer.
https://stackoverflow.com/a/69340289/5679560
As mentioned in below link
https://support.crashlytics.com/knowledgebase/articles/120066-how-do-i-use-logging
You can see this crashes on Crashlytics dashboard if you look at the specific crash itself.
The recommended way to add custom logging to your app is:
Crashlytics.log(int priority, String tag, String msg)
Related
I'm looking to improve and get better insights into the apps behaviour right before a crash. In the production we have a lot of Timber.d and Log.XX calls issued but it is not possible to currently see the full application's log-stack in Firebase Crashlytics section. We only see the stacktrace of the crash as well as all the custom Firebase events that have been called.
Can someone advise on any feasible methods of forcing the application to submit the full log-stack upon a crash such that it would also be visible in Firebase?
There is no way to post full log files to Crashlytics.
What you can do:
Log events with Analytics at key points in your app's flow, which will then also show up (as a sort of breadcrumb) in your Crashlytics views by adding custom keys.
Write custom log messages for key points in your code leading up to the crash.
Set a user ID for your app instance, and then write the log file to another cloud based storage location (like Cloud Storage, for which there's also a Firebase SDK) with that same user id, after the app is restarted.
I need to get logs which is stored as a log file in end user device, for getting that I can implement send feedback option and make user send the file to a email address given in intent.
But I need something better than this like google analytics or some other logging stuff which is easy to use where we can upload a file, and still manage other log events too.
You can use Firebase, it's have many feature to use.
Report Crashes on Android
Firebase Crash Reporting creates detailed reports of the errors in your app. Errors are grouped into issues based on having similar stack traces, and triaged by the severity of impact on your users. In addition to receiving automatic reports, you can log custom events to help capture the steps leading up to a crash.
You can watch docs in here: https://firebase.google.com/docs/crash/android
In my app ,i have integrated Crashlytics ,ACRA and Google Analytics for reporting crashes
-> is there any side effect of one on others ?
-> Which one is better to use.
-> How crash reporting tools work ,if one caught the crash how other will get to report the same crash ?
Using multiple crash reporting solutions in one project simultaneously might run your application into concurrency issue, where application eventually hangs forever upon any crash.
Crash reporting solutions intercept uncaught crashes, in one way or another. The flow is basically the same:
Intercept uncaught crash;
Log it to be able to send info to server;
Re-throw crash, so that the app eventually crashes.
I could imagine a situation where 2 crash reporting solutions create an infinite loop throwing the same exception to each other forever, according to the steps above.
At least, that's what it looked like when I used Google Analytics (with crash reporting turned on) together with Crashlytics. The application just hanged forever without any visible crashing, until I eventually turned Google Analytics crash reporting off.
is there any side effect of one on others ?
Google Analytics is not really good to use. I created a Google Analytics account a few days before the implementation. It had not been used and not even been copied(the code) and when I came back to insert Google Analytics I had to get the code. Noone had used a Google Analytics version of the app and it wasn't even released and it had a lot of usages logged. I don't like google analytics because the code's are easy to crack and are used by third party websites without consent to add fake clicks on your website when the code isn't even used there.
Additonally, Google Analytics does only handle when it is forced to log. As it is not a dedicated crash analytics tool it does not log crashes like ACRA, Crashalytics and Firebase crashes.
Which one is better to use.
That is really up to you, but personally I find ACRA to be better because you can use backends on your own site. If the site goes down, so does ACRA so it really helps to feel in control of the bringing the site back up.
Additionally, there are many backends if you want to use your own site. And if you don't find one that works you can create one. Crashalytics and Firebase rely on their own dashboard on their respective pages, which means another password and username to remember.
How crash reporting tools work ,if one caught the crash how other will get to report the same crash ?
See Drew's answer
Crash analytics tools Might be using Global Exception handling as in this https://stackoverflow.com/a/8877177/1602333 for entire App to handle uncaught Exceptions.
SO if you use multiple crash analytics tools , each of them may replace Global Exception handler .
I'm developing an Android app that is currently in the Play Store. I've been getting reports of a crash on certain devices that I can't reproduce, and the Play Store's built in crash diagnostics don't contain enough information. What I really need is the Logcat information from these devices, but it seems that Android 4.1 and above don't allow the use of those "Log Collector" apps that used to be so popular for this purpose due to security concerns. Is there a library that I can add to my app that will allow it to log to a remote server on demand? I know enough about this crash that I could put a call to some mythical sendLogcatNow() function in the appropriate spot in the code, if I had such a function. Since the information I seek is not actually part of the crash (the crash occurs later), normal crash reporting tools such as Crashlytics don't seem like they will do what I need, but perhaps they have this feature and it's just not prominent in the documentation. Thanks!
There are few version for crash reporting..
Hockey App
Acra
BugSense
Android Remote stack trace
Since your app can always read logs for it's own process, you can also implement something of your own.
Out of all these, I personally prefer Acra. as it is most efficient and give many options to app developers.
I'm using ACRA for logging crashes from my app but based on their documentation,
you can add your own variables content or debug traces to the reports
you can send error reports even if the application doesn't crash
Which seems to be doing what you want.
https://github.com/ACRA/acra
You will need to run your own ACRA server (simple enough to run) and get your app to send the crash logs to your server. Everything is detailed on their website.
I would look into using a third party production crash system, there are a few out there. I am currently using Crashlytics. This specific service allows you to log and set key value pairs during the running of the application that get packaged with the crash report. These services also offer greater insight into the device type, OS and a variety of other device details.
With this set up I have then created a log function that will submit to the Crashlytics service as well as logging it to log cat.
You can also use Google Analytics or Flurry. But note that Google Analytics doesn't log stack traces and Flurry doesn't support real-time log reports on server.
To collect crash reports as a developer one uses logcat. Is there a standard way for a published android application to capture crash logs so that your users can send them to you?
Is there any callback that is called when an app crashes for example? Can the strategy that logcat uses to log be adopted to a production game?
Similar question for iOS Apps:
How can I allow users to give me feedback and submit bug reports for my iOS app?
Related Question
How can I accept bug reports and other user feedback from within my app?
EDIT 1:
In addition to the frameworks mentioned in the answers below a lower level approach to capturing all uncaught exceptions can be used an is mentioned here Ideal way to set global uncaught exception Handler in Android
I personally use ACRA. I found it easy to integrate, and it meets my requirements.
Reports are sent to a spreadsheet in Google Docs, and it can be configured to send you an email every time the app crashes
Using logcat is a solution but is only feasible when crashes are coming from your own device. However, you can have the crashes occurring on your users’ devices automatically sent to you as well, including all crash and device details.
This could be done through Instabug which is a bug & crash reporting service.
It automatically sends a report containing all crash and device details once a crash occurs, plus It only takes a line of code to integrate in your app.
For full disclosure, I work at Instabug. Let me know if I can help.
You can include Flurry Analytics in your app, which does create an error log when something craches and sends in back to the server, which you have access to. It will give you all the information like the LogCat.
I hope this helps.
There is also FirebaseCrash by Google which reports logs on your Firebase console.
Read more about it here
The Google Play Developer Console also reports crashes and application not responsive, under crashes and ANRs for each app.