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