bugsnag / bugsnag-php

BugSnag error monitoring and crash reporting tool for PHP apps
https://docs.bugsnag.com/platforms/php
MIT License
554 stars 77 forks source link

Add ability to discard events based on class/error names #622

Closed imjoehaines closed 3 years ago

imjoehaines commented 3 years ago

Goal

Adds a "discard classes" configuration option that allows events to be discarded based on the exception class name or error name. By default, no events will be discarded

This accepts fully qualified class names and regular expressions. For example, to discard both UnderflowException and OverflowExceptions, either of the following would work:

$bugsnag->setDiscardClasses([
    \UnderflowException::class,
    \OverflowException::class,
]);

or

$bugsnag->setDiscardClasses([
    '/^(Under|Over)flowException$/',
]);

PHP errors (warnings, notices etc...) can also be discarded by the name displayed in the dashboard; this can be obtained using the \Bugsnag\ErrorTypes::getName method. For example, to discard all PHP notices:

$bugsnag->setDiscardClasses([
    \Bugsnag\ErrorTypes::getName(E_NOTICE),
]);

As with exceptions, regexes can also be used:

$bugsnag->setDiscardClasses([
    '/Notice/',
]);

Discarding applies to the entire exception chain, for example if LogicException is a discarded class, then a RuntimeException that wraps a LogicException will also be discarded:

$bugsnag->setDiscardClasses([
    \LogicException::class
]);

// Would be discarded:
throw new RuntimeException('', 0, new LogicException());

// Would _not_ be discarded:
throw new RuntimeException();

NB: the same list is applied to exceptions and PHP errors, so regexes that are too loose can discard more than intended

Changeset