نسخه:

خطاها و ثبت نام

پیکربندی

امکانات ثبت نام برای برنامه شما در Illuminate\Foundation\Bootstrap\ConfigureLogging کلاس bootstrapper پیکربندی شده است. این کلاس log از گزینه پیکربندی فایل پیکربندی شما استفاده می کند config/app.php .

به طور پیش فرض، لاگر برای استفاده از فایل های گزارش روزانه پیکربندی شده است. با این حال، ممکن است در صورت نیاز این رفتار را سفارشی کنید. از آنجایی که لاراول از کتابخانه پرطرفدار logging Monolog استفاده می کند ، می توانید از انواع کنترل کننده هایی که Monolog ارائه می دهد استفاده کنید.

برای مثال، اگر می‌خواهید به جای فایل‌های روزانه از یک فایل گزارش استفاده کنید، می‌توانید تغییرات زیر را در config/app.php فایل پیکربندی خود اعمال کنید:

'log' => 'single'

خارج از جعبه، لاراول از حالت های single , daily و Logging پشتیبانی syslog می کرد. errorlog با این حال، شما آزاد هستید که با نادیده گرفتن کلاس bootstrapper، ثبت گزارش را برای برنامه خود به دلخواه شخصی سازی کنید ConfigureLogging .

جزئیات خطا

میزان جزئیات خطای برنامه شما از طریق مرورگر توسط app.debug گزینه پیکربندی در config/app.php فایل پیکربندی شما کنترل می شود. به طور پیش فرض، این گزینه پیکربندی برای احترام به APP_DEBUG متغیر محیطی تنظیم شده است که در .env فایل شما ذخیره می شود.

برای توسعه محلی، باید APP_DEBUG متغیر محیطی را روی true . در محیط تولید شما، این مقدار باید همیشه باشد false .

رسیدگی به خطاها

همه استثناها توسط App\Exceptions\Handler کلاس انجام می شود. این کلاس شامل دو متد report و render .

این report روش برای ثبت استثناها یا ارسال آنها به یک سرویس خارجی مانند BugSnag استفاده می شود . به طور پیش فرض، report متد به سادگی استثنا را به پیاده سازی پایه در کلاس والد که در آن استثنا ثبت شده است، ارسال می کند. با این حال، شما آزاد هستید که استثناها را هر طور که می خواهید ثبت کنید. اگر نیاز به گزارش انواع مختلف استثناها به روش های مختلف دارید، می توانید از instanceof عملگر مقایسه PHP استفاده کنید:

/**
* Report or log an exception.
*
* This is a great spot to send exceptions to Sentry, Bugsnag, etc.
*
* @param \Exception $e
* @return void
*/
public function report(Exception $e)
{
if ($e instanceof CustomException)
{
//
}
 
return parent::report($e);
}

این render روش مسئول تبدیل استثنا به یک پاسخ HTTP است که باید به مرورگر ارسال شود. به طور پیش فرض، استثنا به کلاس پایه ارسال می شود که برای شما پاسخ ایجاد می کند. با این حال، شما آزاد هستید که نوع استثنا را بررسی کنید یا پاسخ سفارشی خود را برگردانید.

ویژگی dontReport کنترل کننده استثنا شامل آرایه ای از انواع استثنا است که ثبت نمی شوند. به طور پیش فرض، استثناهای ناشی از خطاهای 404 در فایل های گزارش شما نوشته نمی شوند. در صورت نیاز می توانید انواع استثناهای دیگری را به این آرایه اضافه کنید.

استثناهای HTTP

برخی استثناها کدهای خطای HTTP را از سرور توصیف می کنند. به عنوان مثال، این ممکن است یک خطای "صفحه یافت نشد" (404)، یک "خطای غیرمجاز" (401) یا حتی یک خطای 500 توسط توسعه دهنده باشد. برای بازگرداندن چنین پاسخی، از موارد زیر استفاده کنید:

abort(404);

در صورت تمایل، می توانید پاسخی ارائه دهید:

abort(403, 'Unauthorized action.');

این روش ممکن است در هر زمانی در طول چرخه عمر درخواست مورد استفاده قرار گیرد.

صفحه خطای سفارشی 404

برای بازگرداندن یک نمای سفارشی برای تمام خطاهای 404، یک resources/views/errors/404.blade.php فایل ایجاد کنید. این نما روی تمام خطاهای 404 ایجاد شده توسط برنامه شما ارائه می شود.

ورود به سیستم

امکانات لاگینگ لاراول یک لایه ساده در بالای کتابخانه قدرتمند Monolog ارائه می دهد . به‌طور پیش‌فرض، لاراول برای ایجاد فایل‌های گزارش روزانه برای برنامه شما پیکربندی شده است که در storage/logs فهرست ذخیره می‌شوند. می توانید اطلاعاتی را در گزارش به این صورت بنویسید:

Log::info('This is some useful information.');
 
Log::warning('Something could be going wrong.');
 
Log::error('Something is really going wrong.');

لاگر هفت سطح گزارش تعریف شده در RFC 5424 را ارائه می دهد : اشکال زدایی ، اطلاعات ، اطلاعیه ، هشدار ، خطا ، بحرانی و هشدار .

آرایه ای از داده های متنی نیز ممکن است به متدهای log ارسال شود:

Log::info('Log message', ['context' => 'Other helpful information']);

Monolog دارای انواع مختلفی از کنترل کننده های اضافی است که می توانید برای ورود به سیستم استفاده کنید. در صورت نیاز، می توانید به نمونه اصلی Monolog که توسط لاراول استفاده می شود دسترسی داشته باشید:

$monolog = Log::getMonolog();

همچنین می‌توانید رویدادی را برای دریافت همه پیام‌های ارسال شده به گزارش ثبت کنید:

ثبت شنونده رویداد Log

Log::listen(function($level, $message, $context)
{
//
});