تسجيل Laravel: كل ما تحتاج إلى معرفته
نشرت: 2022-08-19عند تطوير تطبيق حديث ، يجب أن يكون التسجيل على رأس قائمة الأولويات.
يوفر التسجيل طريقة لتصور تطبيقك في كل من التطوير والإنتاج ، مما يتيح الشفافية والرؤية. من خلال التسجيل المنظم بشكل صحيح ، يمكن أن تصبح التطبيقات الحديثة أسهل في الصيانة حيث يمكننا بشكل استباقي تحديد نقاط الفشل واختناقات الأداء في تطبيقنا.
يأتي إطار عمل Laravel مع نظام تسجيل قوي يتعامل مع جميع العقبات التي ينطوي عليها تكوين نظام تسجيل منظم بشكل صحيح خارج الصندوق. نظام التسجيل الجديد هذا الذي تم تقديمه في Laravel 6.5 قوي ، وسوف نستكشفه في هذه المقالة.
ستستكشف هذه المقالة أساسيات تسجيل Laravel ولماذا يجب عليك استخدام Laravel logging في مشروعك التالي. سنناقش التسجيل المنظم والتسجيل المركزي بالتفصيل. بالإضافة إلى ذلك ، سوف نتعلم كيفية تنفيذ تسجيل Laravel من خلال إنشاء تطبيق Todo.
ستحصل على المزيد من هذه المقالة إذا كان لديك بالفعل ما يلي تحت حزامك:
- معرفة جيدة بتطوير الويب
- الفهم الأساسي لـ Laravel
- بناء تطبيقات باستخدام Laravel
ما هو تسجيل Laravel؟
يدور تسجيل Laravel حول كيفية معالجة Laravel للتسجيل ، أو الإبلاغ التلقائي عن المشكلات ، باستخدام نظام تسجيل PHP فيروسي يسمى Monolog. ومع ذلك ، نظرًا لفلسفة Laravel المتمثلة في استخدام المكتبات الشائعة الموجودة لتنفيذ ميزات إطار عمل مختلفة ، يستخدم Laravel Monolog لجميع احتياجات التسجيل الخاصة به.
Monolog هي مكتبة تسجيل PHP مرنة وشائعة للغاية يمكننا تهيئتها لإرسال سجلاتك إلى الملفات والمآخذ وقواعد البيانات وخدمات الويب الأخرى. يوفر Monolog واجهة مألوفة لكتابة السجلات من ملفات نصية قياسية إلى خدمات إدارة سجلات خارجية متقدمة. يُنشئ Laravel عادةً Monolog لاستخدام ملف تكوين تسجيل قياسي.
لمزيد من المعلومات حول Monolog وميزاته ، تحقق من الوثائق الرسمية ، لأن ذلك خارج نطاق هذه المقالة.
قبل أن نتعمق في تكوين وتنفيذ تسجيل Laravel باستخدام Monolog ، دعنا نستكشف المزيد من الأسباب لاستخدام تسجيل Laravel والأنواع المختلفة.
لماذا نستخدم Laravel Logging؟
لماذا التسجيل ضروري؟
يتعامل بيان تطبيق Twelve-Factor مع التسجيل باعتباره أحد الاهتمامات الحاسمة للتطبيق الحديث ، حيث أن التسجيل هو مفتاح الأداء والمراقبة.
تساعد السجلات في الفهم التفصيلي للأخطاء التي تحدث في الإنتاج وأين نشأت. بالإضافة إلى ذلك ، باستخدام هياكل السجل المناسبة ، يمكن أن يُظهر المستخدم المحدد ، والإجراء الذي تسبب في الخطأ ، والحل المحتمل لإصلاح الأخطاء بشكل أسرع وصيانتها.
يعد التسجيل المنظم منقذًا في تطبيقات الإنتاج من خلال المساعدة في استكشاف العيوب وحل المشكلات في الإنتاج. بالإضافة إلى ذلك ، يمكنك مراقبة وجمع جميع رسائل السجل الخاصة بك في الوقت الفعلي باستخدام أدوات تسجيل متخصصة للتحليل المباشر وإعداد التقارير.
لهذه الأسباب ، تحتاج إلى جعل التسجيل المنظم أولوية قصوى في مشروع التطبيق الحديث التالي.
دعنا نلقي نظرة على نظرة عامة على أنماط التسجيل المختلفة المتاحة.
أساسيات تسجيل Laravel
سيساعدك تعلم أساسيات التسجيل على فهم كيفية تعامل Laravel مع التسجيل وكيف يمكنك تحسين ممارسات التسجيل المنظمة.
دعونا نفحص مفهومين أساسيين في التسجيل لفهم أفضل لكيفية تنفيذ إجراءات التسجيل لدينا.
تسجيل منظم في Laravel
في تطوير البرمجيات ، يقوم التسجيل المنظم بتنفيذ تنسيق رسالة محدد مسبقًا ومتسق لسجلات التطبيق. يسمح هذا التنسيق بمعالجة الرسائل على أنها بيانات يمكن مراقبتها ومعالجتها وتصورها بشكل أفضل بكثير من تنسيق النص العادي.
يجب عليك تنفيذ نهج التسجيل المنظم في تطوير تطبيقك الحديث لأن ملفات السجل هي الأصول الأساسية للمطورين عندما يحدث خطأ ما لتطبيقك في الإنتاج.
نظرًا لأن Laravel يستخدم Monolog ، يمكن للمطورين تنفيذ التسجيل المنظم بسرعة عن طريق تكوين المسجل لتلقي أنواع معينة من المعلومات ، وتخزين ملفات السجل بتنسيقات مختلفة ، وإرسال السجلات إلى خدمات إدارة سجلات لجهات خارجية مختلفة من أجل التصور.
التسجيل المركزي في Laravel
نظام التسجيل المركزي هو المكان الذي يتم فيه إرسال السجلات إلى حلول إدارة السجلات المركزية (CLM) من مصادر متعددة لسهولة الدمج والتصور. ومع ذلك ، فإن CLM هو حل مسجل متخصص يجمع رسائل السجل من مصادر مختلفة ويدمج البيانات لسهولة المعالجة والتصور.
بصرف النظر عن جمع البيانات ، من المتوقع أيضًا أن يدعم CLM تحليل بيانات السجل والعرض الواضح للبيانات بعد التحليل.
التسجيل المنظم مقابل التسجيل الأساسي
دعونا نفحص الفرق بين التسجيل المهيكل والتسجيل الأساسي (غير المنظم) ولماذا يجب عليك استخدام التسجيل المنظم في مشروع Laravel الخاص بك.
التسجيل الأساسي
في التسجيل الأساسي ، يتم تخزين ملفات السجل بتنسيق خام مع بيانات محدودة للاستعلام عن السجلات الفردية وتحديدها.
عند استخدام التسجيل الأساسي ، لن يتمكن المطورون من استخدام أدوات تحليلية من جهات خارجية لقراءة السجلات وعرضها وتحليلها ما لم يطوروا أداة مخصصة أو يلتزموا بأداة محدودة تدعم تنسيق السجل الخاص بهم.
هناك ثلاثة أسباب رئيسية لتجنب استخدام التسجيل الأساسي:
- لا يمكن أن تعمل أنظمة إدارة السجلات المركزية مع البيانات بدون دعم إضافي.
- مطلوب حل مخصص لقراءة وتحليل البيانات الخاصة بحل التسجيل الأساسي.
- قد يكون من الصعب على المسؤولين قراءة بيانات التسجيل الأساسية لأنها أولية وغير منظمة.
التسجيل المنظم
يوفر التسجيل المنظم وقت المطورين باستخدام أدوات تحليلية لسجلات الجهات الخارجية مفتوحة المصدر تدعم بنية السجل القياسية لقراءة السجلات وعرضها وتحليلها.
تكون السجلات مفيدة إذا كانت تحتوي على البيانات الصحيحة المدرجة أدناه ، وهو ما يهدف التسجيل المنظم إلى تحقيقه. يمكننا استخدام البيانات المضمنة في التسجيل المنظم لإنشاء لوحات معلومات ورسوم بيانية ومخططات وأي تصور آخر مفيد لتحديد صحة التطبيق.
هذه أمثلة أساسية للمعلومات التي يمكننا تضمينها في رسائل السجل المهيكلة. بالإضافة إلى ذلك ، يمكنك تخصيص البيانات بالكامل لتناسب احتياجاتك.
فيما يلي بعض الأمثلة على البيانات التي يمكنك جمعها باستخدام التسجيل المنظم:
- المنفذ المستخدم لتنفيذ الوظيفة
- تاريخ ووقت وقوع الحدث
- اسم المستخدم أو المعرف الخاص بالعميل
- وصف الحدث (رسالة السجل)
- البروتوكول المستخدم لتنفيذ الوظيفة
- موقع الحدث الذي تم تشغيله (حدد واجهة برمجة التطبيقات أو التطبيق قيد التشغيل)
- معرف الحدث الفريد
- نوع الإجراء الذي تم تشغيله (مستوى السجل)
يجب أن تحتوي السجلات على بيانات كافية لتصور الحل أو سبب حدث السجل بسهولة. لاحظ أيضًا أنه لا يجب تخزين جميع أنواع المعلومات ، مثل كلمات المرور أو البيانات الحساسة في السجلات.
الآن بعد أن لمحنا ما يدور حوله تسجيل Laravel ، دعنا ننتقل إلى تنفيذ تسجيل Laravel من خلال بناء تطبيق مع التسجيل كمواطن من الدرجة الأولى.
كيفية تنفيذ Laravel Logging باستخدام تطبيق Todo
سنقوم الآن بتطبيق ما تعلمناه حتى الآن من خلال إنشاء مشروع Laravel جديد وتنفيذ تسجيل Laravel.
إذا لم تكن قد استخدمت Laravel من قبل ، يمكنك قراءة ماهية Laravel أو إلقاء نظرة خاطفة على قائمة دروس Laravel الممتازة للبدء.
إعداد Laravel
أولاً ، سننشئ مثيل Laravel جديدًا باستخدام الأمر أدناه. يمكنك البحث عن الوثائق الرسمية للمزيد.
افتح وحدة التحكم الخاصة بك وانتقل إلى المكان الذي تخزن فيه مشاريع PHP قبل تشغيل الأوامر أدناه. تأكد من تثبيت Composer وتكوينه بشكل صحيح.
composer create-project laravel/laravel laravel-logging-app cd laravel-logging-app // Change directory to current Laravel installation php artisan serve // Start Laravel development server
تكوين وبذر قاعدة البيانات
بعد ذلك ، سننشئ قاعدة بياناتنا ، وننشئ نموذجًا جديدًا لـ Todo
، ونزرع 200 بيانات مزيفة للاختبار.
افتح عميل قاعدة البيانات وأنشئ قاعدة بيانات جديدة. سنفعل الشيء نفسه بالاسم laravel_logging_app_db
ثم نملأ ملف env الخاص بنا ببيانات اعتماد قاعدة البيانات:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_logging_app_db DB_USERNAME=//DB USERNAME HERE DB_PASSWORD=//DB PASSWORD HERE
بعد ذلك ، سنقوم بتشغيل الأمر التالي لإنشاء الترحيل ونموذج Todo
في وقت واحد:
php artisan make:model Todo -mc
افتح قاعدة البيانات التي تم العثور عليها في عملية الترحيل / migrations / xxx-create-todos-xxx.php والصقها في الرموز التالية:
<?php use IlluminateSupportFacadesSchema; use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateTodosTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('todos', function (Blueprint $table) { $table->id(); $table->string('title'); $table->text('description')->nullable(); $table->boolean('is_completed')->default(false); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('todos'); } }
يمكنك زرع ملفات todos الخاصة بك ببيانات faker من خلال تعلم زرع قواعد البيانات الخاصة بك في Laravel باستخدام Faker.
نظرة عامة على مونولوج
باستخدام Laravel Monolog ، يمكنك دفق السجلات المهيكلة وإرسالها إلى قنوات مختلفة مثل رسائل البريد الإلكتروني و Slack والملفات والمقابس وصناديق البريد الوارد وقواعد البيانات وخدمات الويب المتنوعة. في Laravel ، يمكنك ضبط التسجيل من ملف ضبط واحد موجود في الملف config / logging.php .
يأتي ملف التكوين مع برامج تشغيل سجل محددة مسبقًا للاختيار من بينها ، والمحرك الافتراضي هو stack
يستخدم القناة single
لتسجيل الدخول إلى ملف laravel.log الموجود في مجلد التخزين / السجلات . سنشرح التسجيل المنظم باستخدام اثنين من محركات سجلات Laravel.
يوفر Laravel عددًا قليلاً من الطرق للتفاعل مع السجلات ، كما هو موضح بشكل عام في ملف وحدة التحكم TodosController.php قريبًا.
كتابة رسائل السجل في وحدة التحكم
افتح ملف وحدة التحكم TodosController.php الذي تم إنشاؤه حديثًا والذي عثر على مجلد app / Http / Controllers والصقه في الرموز التالية:
<?php namespace AppHttpControllers; use AppModelsTodo; use IlluminateHttpRequest; use AppHttpControllersController; use IlluminateSupportFacadesAuth; use IlluminateSupportFacadesLog; class TodosController extends Controller { public function index(Request $request) { $todos = Todo::all(); Log::warning('User is accessing all the Todos', ['user' => Auth::user()->id]); return view('dashboard')->with(['todos' => $todos]); } public function byUserId(Request $request) { $todos = Todo::where('user_id', Auth::user()->id)->get(); Log::info('User is accessing all his todos', ['user' => Auth::user()->id]); return view('dashboard')->with(['todos' => $todos]); } public function show(Request $request, $id) { $todo = Todo::find($id); Log::info('User is accessing a single todo', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show')->with(['todo' => $todo]); } public function update(Request $request, $id) { # Validations before updating $todo = Todo::where('user_id', Auth::user()->id)->where('id', $id)->first(); Log::warning('Todo found for updating by user', ['user' => Auth::user()->id, 'todo' => $todo]); if ($todo) { $todo->title = $request->title; $todo->desc = $request->desc; $todo->status = $request->status == 'on' ? 1 : 0; if ($todo->save()) { Log::info('Todo updated by user successfully', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show', ['todo' => $todo]); } Log::warning('Todo could not be updated caused by invalid todo data', ['user' => Auth::user()->id, 'todo' => $todo->id, 'data' => $request->except('password')]); return; // 422 } Log::error('Todo not found by user', ['user' => Auth::user()->id, 'todo' => $id]); return; // 401 } public function store(Request $request) { Log::warning('User is trying to create a single todo', ['user' => Auth::user()->id, 'data' => $request->except('password')]); # Validations before updating $todo = new Todo; $todo->title = $request->title; $todo->desc = $request->desc; $todo->user_id = Auth::user()->id; if ($todo->save()) { Log::info('User create a single todo successfully', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show', ['todo' => $todo]); } Log::warning('Todo could not be created caused by invalid todo data', ['user' => Auth::user()->id, 'data' => $request->except('password')]); return; // 422 } public function delete(Request $request, $id) { Log::warning('User is trying to delete a single todo', ['user' => Auth::user()->id, 'todo' => $id]); $todo = Todo::where('user_id', Auth::user()->id)->where('id', $id)->first(); if ($todo) { Log::info('User deleted a single todo successfully', ['user' => Auth::user()->id, 'todo' => $id]); $todo->delete(); return view('index'); } Log::error('Todo not found by user for deleting', ['user' => Auth::user()->id, 'todo' => $id]); return; // 404 } }
ضمن كل من الطرق الموجودة في TodoController
، أضفنا واجهة Log
بمستوى سجل محدد لتحديد نوع الخطأ الذي نريد إرساله. فيما يلي مثال على استخدام ملف
واجهة السجل في طريقة store
.
public function store(Request $request) { Log::warning('User is trying to create a single todo', ['user' => Auth::user()->id, 'data' => $request->except('password')]); # Validations before updating $todo = new Todo; $todo->title = $request->title; $todo->desc = $request->desc; $todo->user_id = Auth::user()->id; if ($todo->save()) { Log::info('User create a single todo successfully', ['user' => Auth::user()->id, 'todo' => $todo->id]); return view('show', ['todo' => $todo]); } Log::warning('Todo could not be created caused by invalid todo data', ['user' => Auth::user()->id, 'data' => $request->except('password')]); return; // 422 }
تنسيق رسائل السجل
لنفترض أنك غير مرتاح لـ LineFormatter
الافتراضي الذي يستخدمه Laravel ، والذي يقوم بعمل رائع في توفير رسائل مفيدة وسهلة القراءة.
في هذه الحالة ، يمكنك بسهولة تدوير كائن منسق مخصص ليناسب حالة الاستخدام الخاصة بك واستخدامه في جميع أنحاء التطبيق.
توفر وثائق Monolog الرسمية قائمة كاملة بالمنسقات المتاحة ويمكنها بسهولة إنشاء تنسيق مخصص.
في Laravel ، يمكنك بسهولة تعيين أي من برامج التشغيل لاستخدام المنسق المخصص عن طريق إضافته إلى القائمة كما هو موضح أدناه داخل ملف التكوين الموجود في config / logging.php :
'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => 14, 'formatter' => MonologFormatterHtmlFormatter::class, 'formatter_with' => [ 'dateFormat' => 'Ym-d', ] ],
يضيف المثال أعلاه MonologFormatterHtmlFormatter
مخصصًا إلى برنامج التشغيل daily
باستخدام formatter
formatter_with
مع المفتاح في تكوين القناة daily
لتغيير تنسيق التواريخ.
إرسال السجلات إلى قنوات مختلفة
بمساعدة Monolog ، يمكن لـ Laravel إرسال سجلات إلى قنوات مختلفة وقنوات متعددة في وقت واحد.
دعنا نوضح كيفية إرسال السجلات إلى قناة Slack الخاصة بنا باتباع هذه الخطوات البسيطة. قم بتغيير قناة السجل الافتراضية إلى Slack وأضف عنوان URL لـ Slack Webhook في ملف .env الخاص بك.
LOG_CHANNEL=slack LOG_SLACK_WEBBHOOK_URL= Slack_webhook_url_here
بعد ذلك ، اختبر التكوين الخاص بك عن طريق تسجيل رسالة في تطبيقك باستخدام واجهة Log
مثل تلك الموضحة أدناه:
Log::debug("The API instance is on fire caused by:", ['user' => 1])
يمكنك فتح قناة Slack الخاصة بك للتحقق من الخطأ المطبوع في القناة المطلوبة التي حددتها عند إنشاء عنوان URL لـ Webhook.
ملخص
التسجيل مهم مثل أي عامل آخر لتطبيقك ، إن لم يكن أكثر من ذلك. لهذا السبب اقترحه بيان تطبيق Twelve-Factor كأحد أهم الاهتمامات لأي تطبيق حديث.
من خلال التسجيل الفعال ، يمكنك بسهولة قراءة وعرض وتصور الأخطاء والعيوب التي تحدث في تطبيقك الجاهز للإنتاج. لتحقيق هذه الغاية ، من المهم أن تقوم بتطبيق تسجيل الدخول المنظم إلى التطبيق الخاص بك منذ بداية المشروع.
في هذه المقالة ، استكشفنا تسجيل Laravel ولماذا يجب عليك استخدامه في مشروعك التالي. ناقشنا كلاً من التسجيل المنظم والتسجيل المركزي بالتفصيل. بالإضافة إلى ذلك ، تعلمنا كيفية تنفيذ تسجيل Laravel من خلال إنشاء تطبيق Todo.
كيف تخطط لتنفيذ تسجيل الدخول إلى تطبيقك التالي؟ إعلامنا في قسم التعليق.