PHP Developer
لاراول ، لاگ ریکوئست ها
بعضی کارها هست که ممکنه اول پروژه بهش فکر نکنید و بعدا یه روزی خیلی شدید نیازتون بشه و با خودتون بگید کاش از اول این کارارو میکردم . مثل Backup گرفتن . که تا وقتی که یهو دیتاتون رو از دست ندید قدرش رو نمیدونید ! ( در مورد بک آپ بعدا مفصل صحبت می کنیم ) . لاگ ریکوئست ها هم همینطور .
چرا باید ریکوئست ها رو لاگ کنیم ؟
در یک پروژه که خط تولید یک کارخونه توسط وب اپ مدیریت می شد ، یه سری صفحه بودن که مهندسین و اپراتورهای بخش برنامه ریزی تولید ، قطعات مختلف یک محصول رو توی سیستم تعریف میکردن . مثلا یک میز شامل تعدادی board , layer , profile , part و ... میشه . که هر کدوم باید ازش کلی اطلاعات وارد کنن مثلا نوع mdf .. مسیری که باید توی کارخونه طی کنه ، نقشه های برش ، تامین کننده و و و ....
خب . مهندس معمار یا اپراتور می نشست پشت سیستم و مثلا برای یک میز ساده حدود 10-20 دقیقه با دقت و حوصله تمام آیتم ها رو وارد میکرد . بعد که save رو میزد ، یهو بنا به هر دلیلی ( که بالاخره جلوی اون هارو هم تا جایی که میشه باید گرفت ) دیتا از دست میرفت و ذخیره نمیشد .... !!!! آقا این چه وضعشه . آقا من 20 دقیقه وقت گذاشتم ... و و و ....
در مورد بعدی مثلا مدیریت میاد میگه که فلان آیتم یا فلان محصول رو کی وارد سیستم کرده ؟ چه زمانی ؟ مرورگرش چی بوده آی پیش چی بوده و و و ....
اون موقع با خودتون میگید چه خوب میشد یه سیستم لاگ داشتیم که همه ریکوئست ها رو با اطلاعات فرستنده نگه می داشت و راحت میشد رفت خوندش ( مثلا یک فایل حجیم یا قاطی پاتی توی سرور نمیبود ) و دسترسی بهش آسون میبود . اصلا یه بخش گرافیکی خوشگل توی سایت میبود که لاگ ها رو نشون میداد .
خب . حالا شاید قدر این قضیه بیشتر دونسته بشه .
اینکار خیلی سخت نیست و میتونید مثلا از پکیج زیر استفاده کنید :
ولی من توی این مورد ترجیح دادم یک روش خودم داشته باشم و پیادش کنم .
یه table ساختم با مشخصات زیر :
و از اونور توی controller اصلی که همه ازش ارث بری میکنن این قطعه کد رو نوشتم ( روش های جالب تر و بهتری هم هست مثل نوشتن middleware )
نکته های کد بالا :
- من روشی که آی دی کاربر رو بدست میاوردم رو از قطعه کد حذف کردم. شما بسته به روش authentication سیستمتون آی دی کاربر رو توی متغیر مربوطه ذخیره کنید .
- برای تشخیص agent ( مثلا نوع مرورگر و موبایل و ... ) از کتابخونه ی jenssegers/agent استفاده کردم و برای خودم یه helper function نوشتم که همه جا بتونم ازش استفاده کنم . خروجی این تابع هم یه رشته هست که نمونش رو توی عکس زیر که همون تیبل logs هست میبینید .
- من این شرط رو گذاشتم که اگر ریکوئست کلاینت GET نبود ذخیره کن . اگر دوست دارید میتونید این شرط رو بردارید .
- اگر مثل ما کل سیستمون API based هست این سایت برای خوشگل کردن ورودی های json اپراتور ها ممکنه به دردتون بخوره : https://jsonformatter.org
- نیاز ما نبوده که فعلا خروجی api رو ذخیره کنیم اما شما میتونین این کار رو انجام بدید .
در نهایت بهترین روش رو خودتون سریع میتونید پیدا کنید و از بهترین کتابخونه ها واسه این کار استفاده کنید اما پیشنهاد من اینه که از این کار دریغ نکنین :) موفق باشین
مطلبی دیگر از این انتشارات
روابط پلی مورفیک (چند ریختی یا چند دگردیسی) در لاراول
مطلبی دیگر از این انتشارات
راه اندازی داکر برای پروژه های لاراولی با laradock
مطلبی دیگر از این انتشارات
تغییرمسیر های تو در تو برای فریمورک لاراول