پرش به مطلب اصلی

PHP و لاراول

لاراول​

composer require sentry/sentry-laravel
php artisan sentry:publish --dsn=https://<public_key>@<your-errora-host>/<project_id>

دستور sentry:publish فایل config/sentry.php را می‌سازد و DSN را به .env اضافه می‌کند:

SENTRY_LARAVEL_DSN=https://<public_key>@<your-errora-host>/<project_id>
SENTRY_TRACES_SAMPLE_RATE=0.2
SENTRY_PROFILES_SAMPLE_RATE=1.0
SENTRY_ENVIRONMENT=production
SENTRY_RELEASE=myapp@1.4.2

گزارش استثناها​

لاراول ۱۱ به بعد (bootstrap/app.php):

->withExceptions(function (Illuminate\Foundation\Configuration\Exceptions $exceptions) {
Sentry\Laravel\Integration::handles($exceptions);
})

لاراول ۱۰ و پیش از آن: در متد register() فایل app/Exceptions/Handler.php تابع Integration::captureUnhandledException($e) را صدا بزنید.

ردیابی کارایی​

فقط SENTRY_TRACES_SAMPLE_RATE کافی است تا درخواست‌ها، کوئری‌ها، جاب‌های صف، کش، فراخوانی‌های HTTP و رندر ویو ابزارگذاری شوند. برای تراکنش کامل درخواست، میان‌افزار را هم اضافه کنید:

// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
$middleware->append(\Sentry\Laravel\Tracing\Middleware::class);
})

لاگ​

// config/logging.php
'channels' => [
'sentry' => [
'driver' => 'sentry',
'level' => env('LOG_LEVEL', 'info'),
'bubble' => true,
],
'stack' => ['driver' => 'stack', 'channels' => ['single', 'sentry']],
],

بعد از آن Log::warning('payment retried', ['order_id' => $order->id]); با همان زمینه در لاگ‌ها دیده می‌شود.

دستورهای زمان‌بندی‌شده (مانیتور کران)​

$schedule->command('invoices:generate')
->dailyAt('03:00')
->sentryMonitor('nightly-invoices');

چک‌این‌ها روی همان اسلاگ مانیتور می‌نشینند — نگاه کنید به مانیتورینگ کران.

اطلاعات کاربر​

\Sentry\configureScope(function (\Sentry\State\Scope $scope) {
$scope->setUser(['id' => auth()->id(), 'username' => auth()->user()?->name]);
});

PHP ساده​

composer require sentry/sdk
\Sentry\init([
'dsn' => getenv('SENTRY_DSN'),
'environment' => 'production',
'release' => 'myapp@1.4.2',
'traces_sample_rate' => 0.2,
'send_default_pii' => false,
]);

try {
riskyThing();
} catch (\Throwable $e) {
\Sentry\captureException($e);
}

Symfony​

composer require sentry/sentry-symfony
# config/packages/sentry.yaml
sentry:
dsn: '%env(SENTRY_DSN)%'
options:
traces_sample_rate: 0.2
environment: '%kernel.environment%'

بررسی نهایی​

php artisan sentry:test

این دستور یک استثنای آزمایشی از مسیر DSN تنظیم‌شده می‌فرستد و نتیجه را چاپ می‌کند. سپس صفحهٔ خطاها را ببینید.