Я использую Sentry в библиотеке Android, которая предназначена для использования другими разработчиками. Я получаю много исключений из приложений, использующих мою библиотеку, но не имеющих к ней никакого отношения, и я бы очень хотел их игнорировать. Есть ли способ отфильтровать исключения, чтобы я сообщал только о тех, у которых есть пакет моей библиотеки где-то в трассировке стека?




Вы можете использовать ShouldSendEventCallback:
public static void example() {
SentryClient client = Sentry.getStoredClient();
client.addShouldSendEventCallback(new ShouldSendEventCallback() {
@Override
public boolean shouldSend(Event event) {
// decide whether to send the event
for (Map.Entry<String, SentryInterface> interfaceEntry : event.getSentryInterfaces().entrySet()) {
if (interfaceEntry.getValue() instanceof ExceptionInterface) {
ExceptionInterface i = (ExceptionInterface) interfaceEntry.getValue();
for (SentryException sentryException : i.getExceptions()) {
// this example checks the exception class
if (sentryException.getExceptionClassName().equals("foo")) {
// don't send the event
return false;
}
}
}
}
// send event
return true;
}
});
}
Есть билет, чтобы упростить это: https://github.com/getsentry/sentry-java/issues/575
Для всех, у кого есть моя точная проблема, я изменил ответ Бретта, чтобы он проверял всю трассировку стека, поскольку причина исключения иногда может быть скрыта в Android.
SentryClient client = Sentry.getStoredClient();
client.addShouldSendEventCallback(new ShouldSendEventCallback() {
@Override
public boolean shouldSend(Event event) {
for (Map.Entry<String, SentryInterface> interfaceEntry : event.getSentryInterfaces().entrySet()) {
if (interfaceEntry.getValue() instanceof ExceptionInterface) {
ExceptionInterface i = (ExceptionInterface) interfaceEntry.getValue();
for (SentryException sentryException : i.getExceptions()) {
for (SentryStackTraceElement element : sentryException.getStackTraceInterface().getStackTrace()) {
if (element.getModule().contains("com.example.library")) {
return true;
}
}
}
}
}
return false;
}
});
Не могли бы вы добавить трассировку стека / журналы, чтобы объяснить / уточнить вашу проблему?