Utilizo Sentry en una biblioteca de Android que pueden usar otros desarrolladores. Recibo muchas excepciones de aplicaciones que usan mi biblioteca pero que no tienen nada que ver con la biblioteca, y realmente me gustaría ignorarlas. ¿Hay alguna forma de filtrar las excepciones para que solo informe aquellas que tienen el paquete de mi biblioteca en algún lugar del stacktrace?

1
davkutalek 17 oct. 2018 a las 01:32

2 respuestas

La mejor respuesta

Puedes usar una 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;
        }
    });
}

Hay un ticket para facilitar esto: https://github.com/getsentry/sentry -java / issues / 575

1
Brett 17 oct. 2018 a las 11:48

Para cualquier persona con mi problema exacto, modifiqué la respuesta de Brett para que verifique todo el seguimiento de la pila, ya que la causa de una excepción a veces puede estar oculta en 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;
    }
});
0
davkutalek 17 oct. 2018 a las 15:05