Aller au contenu

SDK PHP (Laravel + Symfony)

Le SDK Pionne pour PHP. Trois usages : standalone, Laravel (auto-detect via service provider), Symfony (event subscriber).

Fenêtre de terminal
composer require pionne/pionne
  • PHP_VERSION — version PHP
  • php_uname() — OS, hostname
  • URL de la requête, méthode HTTP, route name
  • User ID si auth (Laravel Auth::user(), Symfony Security::getUser())
  • Queries DB (Laravel : via DB::listen(), Symfony : via Doctrine middleware)
  • Requêtes HTTP sortantes (middleware Guzzle automatique)
  • Logs Log::info() / error_log()

Le service provider est auto-discover. Configure via env vars :

.env
PIONNE_TOKEN=pio_live_…
PIONNE_ENVIRONMENT=production
PIONNE_RELEASE=1.0.0

Et dans config/services.php :

'pionne' => [
'token' => env('PIONNE_TOKEN'),
'environment' => env('PIONNE_ENVIRONMENT', 'production'),
'release' => env('PIONNE_RELEASE'),
'sample_rate' => 1.0,
'scrub_pii' => true,
],

Pour Laravel 11+, hook dans bootstrap/app.php :

use Pionne\Laravel\PionneHandler;
return Application::configure(basePath: dirname(__DIR__))
->withExceptions(function (Exceptions $exceptions) {
$exceptions->report(function (Throwable $e) {
PionneHandler::report($e);
});
})->create();

Pour Laravel 10 et avant, dans App\Exceptions\Handler :

use Pionne\Pionne;
public function report(Throwable $e): void
{
Pionne::captureException($e);
parent::report($e);
}

Les jobs de queue sont auto-instrumentés — toute exception non gérée dans un Job est capturée.

Pionne::init(['token' => '', 'environment' => '']);
Pionne::captureException($e, ['tags' => ['feature' => 'checkout']]);
Pionne::captureMessage('Cache miss', ['level' => 'warning']);
Pionne::setUser(['id' => 'user_42']);
Pionne::setTags(['region' => 'eu-west-1']);
Pionne::setEnabled(false);
Pionne::addBreadcrumb(['category' => 'db', 'message' => 'SELECT ...']);
  • Laravel queue : auto-instrumenté (events JobFailed)
  • Symfony Messenger : auto-instrumenté (subscriber sur WorkerMessageFailedEvent)
  • Custom worker : wrap manuellement
try {
$job->handle();
} catch (\Throwable $e) {
Pionne::captureException($e, [
'tags' => ['job' => get_class($job)],
'contexts' => ['job' => ['attempts' => $job->attempts()]],
]);
throw $e;
}

Le hostname (gethostname()) est auto-pinné côté serveur au premier event. Si ton token fuite et qu’il est utilisé depuis un autre serveur, les events sont rejetés.