> For the complete documentation index, see [llms.txt](https://docs.pushlink.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pushlink.com/exception-notification.md).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
