يتم تنسيق ملفات سجل Symfony بنفس الطريقة لجميع البيئات. وهذا يعني أن dev.log
مُحسّن للأجهزة بدلاً من البشر. والنتيجة هي ملف سجل متضخم بمعلومات عديمة الفائدة تجعلك أقل إنتاجية.
EasyLogHandler هو معالج Monolog جديد يقوم بإنشاء ملفات سجل صديقة للإنسان. تم تحسينه لعرض معلومات السجل بطريقة واضحة وموجزة. استخدمه في بيئة التطوير لتصبح مطورًا أكثر إنتاجية.
سمات
تثبيت
التكوين والاستخدام
هذه بعض أفضل ميزات EasyLogHandler وكيفية مقارنتها بسجلات Symfony الافتراضية.
تعد ملفات سجل Symfony عبارة عن تدفق ضخم من النصوص. عند فتحها، لا يمكنك بسهولة معرفة متى بدأ الطلب أو انتهى وما هي رسائل السجل التي تنتمي معًا:
سيمفوني | EasyLogHandler |
---|---|
يقوم EasyLogHandler ببناء ملفات السجل بطريقة مختلفة:
ويضيف رأسًا كبيرًا وبعض الأسطر الجديدة لفصل سجلات كل طلب؛
إذا كان الطلب أقل أهمية (مثل الطلبات الأساسية)، يكون الرأس أكثر إحكاما ويعرض معلومات أقل؛
يتم تقسيم رسائل السجل داخليًا حتى تتمكن من فهم أجزائها المختلفة بشكل أفضل (الطلب، والعقيدة، والأمن، وما إلى ذلك)
أولاً، لا يعرض EasyLogHandler الطابع الزمني في كل رسالة سجل. في بيئة dev
، لا يجب أن تهتم بذلك، لذلك يتم عرض الطابع الزمني مرة واحدة فقط لكل مجموعة من رسائل السجل.
سيمفوني | EasyLogHandler |
---|---|
يتم عرض المعلومات extra
، التي تتضمنها بعض رسائل السجل لإضافة المزيد من التفاصيل حول السجل، فقط عندما تكون مختلفة عن السجل السابق. في المقابل، يعرض Symfony دائمًا المعلومات extra
لجميع السجلات، مما يؤدي إلى إنشاء الكثير من المعلومات المكررة:
سيمفوني |
---|
EasyLogHandler |
---|
لقد أصبح من الشائع بشكل متزايد استخدام العناصر النائبة في رسائل السجل بدلاً من القيم الفعلية (على سبيل المثال Matched route "{route}".
بدلاً من Matched route "home".
) يعد هذا أمرًا رائعًا بالنسبة للأجهزة، لأنها يمكنها تجميع الرسائل المتشابهة التي تختلف فقط في قيم العنصر النائب.
ومع ذلك، بالنسبة للبشر، هذه "الميزة" مزعجة. ولهذا السبب يقوم EasyLogHandler تلقائيًا باستبدال أي عنصر نائب مضمن في رسالة السجل:
سيمفوني |
---|
EasyLogHandler |
---|
يجب أن تبرز العناصر المهمة، مثل حالات الإهمال والرسائل المتعلقة بالأمان، في ملفات السجل لمساعدتك في اكتشافها على الفور. ومع ذلك، في Symfony تبدو جميع السجلات متشابهة تمامًا. كيف يمكنك معرفة ما هي أهمها؟
سيمفوني |
---|
(جميع الرسائل تبدو متشابهة تمامًا) |
EasyLogHandler |
---|
(حالات الإيقاف والتحذيرات والأخطاء والرسائل الأمنية تبرز) |
تحتوي رسائل السجل عادةً على متغيرات ذات صلة في context
وخصائص extra
. إن عرض محتوى هذه المتغيرات في ملفات السجل يمثل دائمًا توازنًا صعبًا بين سهولة القراءة والإيجاز.
يقرر EasyLogHandler كيفية تضمين هذه المتغيرات ديناميكيًا اعتمادًا على كل رسالة سجل. على سبيل المثال، يتم دائمًا تضمين معلمات استعلام Doctrine ولكن يتم تضمين معلمات الطلب للطلبات غير المهمة ومتداخلة للطلبات المهمة:
عندما تتضمن رسائل السجل تتبعات مكدس الأخطاء، فأنت بالتأكيد تريد إلقاء نظرة عليها. ومع ذلك، يعرض Symfony آثار المكدس مضمنة، مما يجعل من المستحيل فحصها. يعرضها EasyLogHandler كتتبعات مكدس مناسبة:
سيمفوني |
---|
EasyLogHandler |
---|
إحدى أكثر التجارب المحبطة عند فحص ملفات السجل هي وجود الكثير من الرسائل المتتالية المتكررة أو المشابهة. أنها توفر القليل من المعلومات وأنها مجرد صرف انتباهك. يقوم EasyLogHandler بمعالجة جميع رسائل السجل مرة واحدة بدلاً من واحدة تلو الأخرى، لذا فهو على علم بوجود سجلات متتالية مماثلة.
على سبيل المثال، هذا ملف سجل Symfony يعرض ثلاث رسائل ترجمة مفقودة متتالية:
وهذه هي الطريقة التي يتم بها عرض نفس الرسائل بواسطة EasyLogHandler:
ويكون الفرق أكثر وضوحًا بالنسبة للرسائل "التي تم الإبلاغ عنها بالحدث"، والتي عادةً ما تولد عشرات الرسائل المتتالية:
سيمفوني |
---|
EasyLogHandler |
---|
يتم توزيع هذا المشروع كحزمة PHP بدلاً من حزمة Symfony، لذلك تحتاج فقط إلى طلب المشروع مع Composer:
يتطلب الملحن $ --dev easycorp/easy-log-handler
حدد خدمة جديدة في تطبيقك لمعالج السجل هذا:
إصدار سيمفوني الأحدث:
# config/packages/dev/easy_log_handler.yamlservices:EasyCorpEasyLogEasyLogHandler:public: falsearguments: ['%kernel.logs_dir%/%kernel.environment%.log']
إصدار سيمفوني الأقدم:
# app/config/services.ymlservices:# ...easycorp.easylog.handler:class: EasyCorpEasyLogEasyLogHandlerpublic: falsearguments: - '%kernel.logs_dir%/%kernel.environment%.log'
قم بتحديث تكوين Monolog الخاص بك في بيئة dev
لتحديد معالج مخزَّن يغلف خدمة المعالج الجديدة هذه (تابع القراءة لفهم السبب). يمكنك نسخ ولصق هذا التكوين بأمان:
إصدار سيمفوني الأحدث:
# config/packages/dev/monolog.yamlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ['!event']المستوى: debugeasylog:type: Serviceid: EasyCorpEasyLogEasyLogHandler
إصدار سيمفوني الأقدم:
# app/config/config_dev.ymlmonolog:handlers:buffered:type: bufferhandler: easylogchannels: ["!event"]المستوى: debugeasylog:type: Serviceid: easycorp.easylog.handler
تتعامل معظم معالجات السجل مع كل رسالة سجل بشكل منفصل. في المقابل، تتطلب معالجة السجل المتقدمة لـ EasyLogHandler أن تكون كل رسالة سجل على علم بالسجلات الأخرى (على سبيل المثال، لدمج رسائل متتالية مماثلة). وهذا يعني أنه يجب التقاط جميع السجلات المرتبطة بالطلب ومعالجتها دفعة واحدة.
في التكوين أعلاه، يحفظ المعالج buffered
جميع رسائل السجل ثم يمررها إلى معالج EasyLog، الذي يعالج جميع الرسائل مرة واحدة ويكتب النتيجة في ملف السجل.
استخدم المعالج buffered
لتكوين القنوات المسجلة/المستبعدة ومستوى الرسائل التي يتم تسجيلها.