خطاها و ثبت نام
پیکربندی
امکانات ثبت نام برای برنامه شما در
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){ //});