Search by

sopheos / pebble_bugsnag

sopheos

Error reporting handlers: Bugsnag, error_log and on-screen display

Package info

github.com/sopheos/pebble_bugsnag

pkg:composer/sopheos/pebble_bugsnag

Statistics

Installs: 268

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

1.1.1 2026-10-06 12:42 UTC

This package is auto-updated.

Last update: 2026-10-06 12:48:55 UTC


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 = []) : static Signale une erreur de niveau notice.
  • warning(\Throwable $exception, array $data = []) : static Signale un avertissement.
  • error(\Throwable $exception, array $data = []) : static Signale 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, puis Extra data: et le print_r() de $data s'il n'est pas vide, puis Stack 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' ou STDIN dé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 (voir TODO.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.