sopheos / pebble_bugsnag
Error reporting handlers: Bugsnag, error_log and on-screen display
Requires
- php: >=8.1.0
- bugsnag/bugsnag: ^3.28
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Handlers de rapport d'erreurs interchangeables derrière une même interface : envoi à Bugsnag en production, error_log() par défaut, affichage à l'écran en développement.
La lib n'installe ni set_error_handler() ni set_exception_handler() : c'est à l'application de convertir ses erreurs en Throwable et d'appeler le handler choisi.
Installation
composer require sopheos/pebble_bugsnag
Claude Code
Ce package fournit un skill Claude Code dans skills/pebble-bugsnag/. Il documente les patterns d'usage et les pièges de la librairie : choix du handler selon l'environnement, DisplayHandler qui journalise aussi, sortie HTML non échappée, exception précédente non journalisée, etc.
Dans un projet qui dépend de sopheos/pebble_bugsnag, copie-le une fois dans .claude/skills/ après composer install pour que Claude Code le charge automatiquement. Le nom du dossier doit correspondre au name déclaré dans SKILL.md :
cp -r vendor/sopheos/pebble_bugsnag/skills/pebble-bugsnag .claude/skills/pebble-bugsnag
Pour la maintenance de la lib elle-même, voir CLAUDE.md. Les bugs connus sont listés dans TODO.md.
HandlerInterface
\Pebble\Bugsnag\HandlerInterface est le contrat commun. Les trois méthodes renvoient le handler, elles sont chaînables.
notice(\Throwable $exception, array $data = []) : staticSignale une erreur de niveau notice.warning(\Throwable $exception, array $data = []) : staticSignale un avertissement.error(\Throwable $exception, array $data = []) : staticSignale une erreur.
$data contient des données complémentaires (utilisateur, requête…).
BugsnagHandler
\Pebble\Bugsnag\BugsnagHandler envoie l'exception à Bugsnag via \Bugsnag\Client::notifyException().
__construct(\Bugsnag\Client $bugsnag)Client Bugsnag déjà configuré.- Sévérités :
notice()→info,warning()→warning,error()→error. $data, s'il n'est pas vide, est passé àReport::setMetaData(): chaque clé de premier niveau devient un onglet dans Bugsnag.
$handler = new \Pebble\Bugsnag\BugsnagHandler(\Bugsnag\Client::make('API_KEY')); $handler->error($exception, ['user' => ['id' => 42]]);
DefaultHandler
\Pebble\Bugsnag\DefaultHandler écrit un message multi-lignes avec error_log() (donc dans le fichier défini par l'ini error_log, ou sur la sortie d'erreur du SAPI).
- Préfixes :
PHP Notice,PHP Warning,PHP error. - Format :
Préfixe: message in fichier:ligne, puisExtra data:et leprint_r()de$datas'il n'est pas vide, puisStack trace:et la trace. - L'exception précédente (
getPrevious()) n'est pas journalisée.
DisplayHandler
\Pebble\Bugsnag\DisplayHandler étend DefaultHandler : il journalise et affiche le même message.
- En CLI (
php_sapi_name() === 'cli'ouSTDINdéfini, évalué à la construction), le message brut suivi d'un retour à la ligne. - Sinon, le message dans un
<pre>stylé (bordure rouge). Le message n'est pas échappé : ne pas utiliser ce handler en production (voirTODO.md).
$handler = $isDev ? new DisplayHandler() : new BugsnagHandler($client); set_exception_handler(fn(\Throwable $e) => $handler->error($e));
Tests
composer install vendor/bin/phpunit
Les tests n'appellent jamais Bugsnag : BugsnagHandler n'est testé qu'à la construction. La sortie de DisplayHandler est capturée par ob_start() et error_log est redirigé vers un fichier temporaire.
Les bugs connus sont figés par des tests annotés // BUG: qui vérifient le comportement actuel.