# Exception Notification

1. By default, Pushlink catches all unhandled exceptions in your app and doesn't block the natural life cycle of exceptions.
2. You can also send handled exceptions calling: `PushLink.sendAsyncException()`.
3. Pushlink always sends the exceptions asynchronously and guarantees its delivery.
4. If you also want to get the last 100 LogCat's lines, just add `android.permission.READ_LOGS` in AndroidManifest.xml

## Sending Limit

* Limits include handled and unhandled exceptions.
* PushLink was not designed to be a remote log system. Try not sending network issues or something like that.
* Each app has its sending limit.
* It's calculated using the last 24H, and it isn't cumulative.
* Formula: `sendingLimit == planQuantity * 2`
* Ex1: free plan (5 installations) can send 10 exceptions in the last 24H for each app.
* Ex2: 200 installations can send 400 exceptions in the last 24H for each app.

## Status

The messages you are going to see in the Android log system:

* REGISTERED
  * Exception sent.
* QUEUED
  * Exception not sent but queued due to: java.lang.Exception: Any reason.
* LOST
  * Exception sent but rejected: Invalid API Key. Probably caused by the wrong configuration.
  * Exception sent but rejected: Invalid Package. You probably never uploaded this app.
  * Exception sent but rejected: Invalid APK Hash. Probably you are in a development environment. You did not upload this version yet.
  * Exception sent but rejected: The application \[app name] has exceeded the 24H sending limit.

```java
//When sending exception manually, PushLink doesn't print it in logcat. You have to print it by yourself. 
try {
  ...
} catch (Throwable t) {
  Log.e("MyApp", "Some", t);
  PushLink.sendAsyncException(t);
  //or
  Map<String, String> moreInfo = ... 
  PushLink.sendAsyncException(t, moreInfo);
}
...
//You can also disable the automatic exception catch/send
PushLink.disableExceptionNotification();
...
//To receive LogCat last ones 100 lines just add <uses-permission android:name="android.permission.READ_LOGS" />
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pushlink.com/exception-notification.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
