لاگگیری با SDK لاراول
لاگگیری ساختیافته برای Laravel از طریق کانال Monolog، با ارسال دستهای و تلاش دوباره.
لاگگیری ساختیافته برای Laravel از طریق کانال Monolog، با ارسال دستهای و تلاش دوباره. لاگها زیر ابرووا تریس › Logs نمایش داده میشوند؛ اینها از AbrovaTrace::captureMessage() جدا هستند که به پیامها میرود.
از facade بومی Log در Laravel با یک درایور کانال سفارشی abrovatrace استفاده کنید.
لاگها بافر میشوند و وقتی بافر به batch_size برسد، و هنگام پایان اجرا، فرستاده میشوند.
کلاینت HTTP خطاهای اتصال و پاسخهای 5xx را تا ۳ بار، با انتظار ۱، ۲ و سپس ۳ ثانیه، دوباره امتحان میکند.
سطحهای Monolog خودکار به سطحهای AbrovaTrace (debug، info، warn، error، fatal) نگاشت میشوند.
نصب#
مخزن ابرووا را به composer.json اضافه کنید و بعد نصب کنید (SDK لاراول را ببینید):
"repositories": [
{ "type": "composer", "url": "https://center.abrova.ir/api/packages/abrova/composer" }
]composer require abrova-trace/laravel-sdk
کانال لاگ را به config/logging.php اضافه کنید:
'channels' => [
// ... other channels
'abrovatrace' => [
'driver' => 'custom',
'via' => AbrovaTrace\Laravel\Logging\AbrovaTraceLogChannel::class,
],
],استفادهی پایه#
use Illuminate\Support\Facades\Log;
// Send logs to AbrovaTrace
Log::channel('abrovatrace')->info('User signed up', ['userId' => 123]);
Log::channel('abrovatrace')->warning('Rate limit approaching', ['remaining' => 5]);
Log::channel('abrovatrace')->error('Payment failed', [
'orderId' => 'ORD-456',
'reason' => 'insufficient_funds',
]);سطحهای لاگ#
use Illuminate\Support\Facades\Log;
Log::channel('abrovatrace')->debug('Debug information');
Log::channel('abrovatrace')->info('User action completed');
Log::channel('abrovatrace')->notice('Approaching rate limit'); // Maps to 'info'
Log::channel('abrovatrace')->warning('Slow query detected'); // Maps to 'warn'
Log::channel('abrovatrace')->error('Failed to save data');
Log::channel('abrovatrace')->critical('Service unavailable'); // Maps to 'fatal'
Log::channel('abrovatrace')->alert('Database connection lost'); // Maps to 'fatal'
Log::channel('abrovatrace')->emergency('App crashed'); // Maps to 'fatal'سطحهای Monolog اینطور به سطحهای AbrovaTrace نگاشت میشوند: DEBUG=debug، INFO/NOTICE=info، WARNING=warn، ERROR=error، CRITICAL/ALERT/EMERGENCY=fatal.
لاگگیری مستقیم با SDK#
میتوانید مستقیم از طریق facade ابرووا تریس هم لاگ بگیرید:
use AbrovaTrace\Laravel\AbrovaTraceFacade as AbrovaTrace;
use AbrovaTrace\Laravel\Logging\LogLevel;
// Basic log
AbrovaTrace::log('Server started', LogLevel::INFO);
// With metadata
AbrovaTrace::log('Order processed', LogLevel::INFO, [
'orderId' => 'ORD-123',
'amount' => 99.99,
]);
// User ID: logs carry the id from setUser() (set automatically by the middleware)
AbrovaTrace::setUser(['id' => 'user_abc123']);
AbrovaTrace::log('Payment declined', LogLevel::ERROR, [
'reason' => 'card_expired',
]);
// Convenience methods
AbrovaTrace::info('User logged in');
AbrovaTrace::warn('API rate limit at 80%');
AbrovaTrace::logError('Failed to send email');
// also: trace(), logDebug(), fatal()کانال stack#
با اضافه کردن abrovatrace به یک کانال stack، لاگها را به چند مقصد بفرستید:
// config/logging.php
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'abrovatrace'],
'ignore_exceptions' => false,
],
'abrovatrace' => [
'driver' => 'custom',
'via' => AbrovaTrace\Laravel\Logging\AbrovaTraceLogChannel::class,
],
],// Now Log::info() sends to both daily file AND AbrovaTrace
Log::info('User action', ['userId' => 123]);لاراول exceptionهای گزارششده را در کانال لاگ پیشفرض شما مینویسد و از نسخهی 0.2.3 به بعد، SDK دیگر جلوی این کار را نمیگیرد. اگر abrovatrace در stack پیشفرض باشد، هر exception علاوه بر گزارش بهعنوان خطا، بهشکل یک ورودی لاگ هم در لاگها میرسد.
metadata و اطلاعات زمینه#
// Structured metadata
Log::channel('abrovatrace')->info('Order placed', [
'orderId' => 'ORD-12345',
'amount' => 4500000,
'currency' => 'IRR',
'items' => 3,
]);
// Automatically included with every log:
// - Platform ('laravel'), environment name and release
// - User id, when a user is set (the middleware sets the authenticated user)پیکربندی#
// config/abrovatrace.php
'logging' => [
'source_id' => env('ABROVATRACE_LOG_SOURCE_ID', null), // Groups logs into one source; enables batch sending
'source_name' => env('ABROVATRACE_LOG_SOURCE_NAME', null), // Display name for the source
'batch_size' => 50, // Send when buffer reaches this size
],| گزینه | نوع | اجباری | توضیح |
|---|---|---|---|
| logging.source_id | string | خیر | شناسهی منبع لاگ (مثلاً "api-server"). با آن، هر ارسال یک درخواست دستهای است؛ بدون آن، برای هر لاگ یک درخواست |
| logging.source_name | string | خیر | نام نمایشی خوانا برای منبع |
| logging.batch_size | integer | خیر | وقتی بافر به این اندازه برسد، ارسال انجام میشود (پیشفرض: 50) |
| api_key | string | بله | کلید API پروژه (ab_live_xxx) |
| server_secret | string | خیر | کلید سرور شما (ab_srv_xxx). وقتی تنظیم پروژهی «مسیرهای سرور به کلید سرور نیاز دارند» روشن باشد لازم است |
| debug | boolean | خیر | فعال کردن خروجی دیباگ (پیشفرض: false) |
بهترین روشها#
برای یکپارچگی با لاگگیری بومی Laravel از Log::channel('abrovatrace') استفاده کنید
برای لاگ همزمان در فایل محلی و فضای ابری، abrovatrace را به یک کانال stack اضافه کنید
metadata ساختیافته (شناسهها، مدتزمانها، شمارشها) اضافه کنید تا فیلتر کردن در داشبورد بهتر شود
لاگها شناسهی کاربری را که با AbrovaTrace::setUser() تنظیم شده همراه دارند (برای درخواستهای احرازشده خودکار تنظیم میشود)
برای کارهای عادی info، برای وضعیت افتکرده warn و برای شکستها error
هرگز رمز عبور، توکن یا اطلاعات شخصی را در metadata لاگ نکنید