Sentry Android: игнорировать трассировки стека, которые не содержат мой пакет

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

Не могли бы вы добавить трассировку стека / журналы, чтобы объяснить / уточнить вашу проблему?

Quantum_VC 17.10.2018 01:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
512
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать 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;
    }
});

Другие вопросы по теме