البرمجة وتطوير البرمجيات

دليل عملي لاستخدام Logpoints لتصحيح أخطاء Java وgRPC دون إيقاف الخادم

تشرح JetBrains كيفية استخدام نقاط التسجيل Logpoints داخل IntelliJ IDEA 2026.2 لتشخيص أخطاء تطبيقات Java وgRPC أثناء التشغيل، مع تعديلها وإضافة تعبيرات إليها دون إعادة بناء التطبيق أو نشره. وتوضح المادة لماذا تكون هذه الطريقة أنسب من نقاط التوقف أو عبارات println في بعض السيناريوهات، خصوصاً عندما تؤدي إيقافات الخادم إلى انتهاء مهلة طلبات gRPC.

16 سبتمبر 2026
5 دقائق قراءة
4 قراءة
فريق تحرير certi.news
دليل عملي لاستخدام Logpoints لتصحيح أخطاء Java وgRPC دون إيقاف الخادم

تقدم JetBrains في مادة كتبها Igor Kulakov دليلاً عملياً لاستخدام Logpoints داخل IntelliJ IDEA 2026.2 لتشخيص أخطاء تطبيقات Java أثناء التشغيل. الفكرة تشبه إضافة عبارات println إلى البرنامج، لكن من دون تعديل الشيفرة أو إعادة بناء التطبيق أو إعادة نشره، كما أن العملية لا توقف التنفيذ. هذا يجعلها مناسبة لفحص خدمات تعمل محلياً أو داخل حاوية Docker أو على مضيف بعيد.

المشكلة التي يعالجها المثال

يعتمد المثال على عميل وخادم يتواصلان عبر gRPC. يعيد الخادم قيمة خصم غير صحيحة لبعض المستأجرين. عند إرسال طلب خاص بالمستأجر JetBrains ومنطقة EMEA، تظهر في وحدة التحكم قيمة سعر تبلغ 100.00 دولار مع discount_bps=0، بينما القيمة المتوقعة هي 80.00 دولار مع discount_bps=2000.

يُشغّل الخادم باستخدام Docker مع كشف منفذي الاستماع وتصحيح الأخطاء، ثم يرسل العميل الطلبات دورياً. وبعد تشغيل الخادم والعميل، يمكن للمطور إرفاق مصحح IntelliJ IDEA بالعملية حتى لو لم تبدأ من جلسة تصحيح محلية. ووفق الشرح، يتواصل المصحح عبر مقبس في الحالات المحلية والبيئات المنفصلة والمضيفات البعيدة، لذلك لا يختلف مبدأ الإرفاق بتغير مكان تشغيل عملية Java.

كيف تكشف Logpoints سبب الخطأ؟

في IntelliJ IDEA 2026.2 يمكن إنشاء Logpoint بطريقة أسرع بالنقر في هامش المحرر بين سطرين قابلين للتنفيذ، ثم إدخال التعبير الذي يراد تسجيله. يبدأ المطور بتسجيل معلومات من بداية معالجة الطلب، ثم يضيف نقاطاً أو يعدلها تدريجياً مع استمرار وصول الطلبات.

يقود تتبع سلسلة الاستدعاءات إلى الدالة discountBpsFor(). وتكشف المخرجات أن اسم المستأجر يصل بصيغة JetBrains بينما يتوقع منطق المقارنة القيمة jetbrains. كما توضح المخرجات أن الخصم لم يُطبّق، ما يعني أن الفرع البرمجي الذي يعيد قيمة 2,000 نقطة أساس لم يُنفذ. يقترح المثال إصلاح المقارنة باستخدام equalsIgnoreCase، ثم اختبار السلوك المتوقع.

لا تقتصر الفائدة على عرض النص في وحدة التحكم؛ فعند النقر على سطر من المخرجات يمكن لـ IntelliJ IDEA الانتقال إلى Logpoint أو الجزء البرمجي المرتبط به. وتعمل هذه الملاحة أيضاً مع عبارات println إذا كانت العملية تعمل تحت مصحح IntelliJ IDEA.

متى تتفوق على println ونقاط التوقف؟

توضح المادة أن Logpoints لا تلوث الشيفرة ولا تترك وراءها عبارات تصحيح قد تُرسل بالخطأ إلى بيئة الإنتاج. كما يمكن تغيير ما تسجله ومتى تسجله، بما في ذلك أخذ عينات من الأحداث المتكررة، وإضافة تسجيل داخل التبعيات، وتجنب عمليات إعادة النشر المكلفة.

أما نقاط التوقف التقليدية فقد تكون غير مناسبة عندما يكون إيقاف الخدمة جزءاً من المشكلة. في المثال، يحدد العميل مهلة زمنية لطلب gRPC، ويمكن لهذه المهلة أن تنتقل إلى الخادم. وعندما يوقف المصحح الخادم، تنتهي المهلة وينتقل الطلب إلى مسار الإلغاء، فلا يعود المطور يرى الحالة التي أدت إلى الخطأ. يحتاج استخدام نقطة التوقف عندها إلى إرسال الطلبات تباعاً والعمل داخل نافذة المهلة.

على النقيض، توفر Logpoints المعلومات من دون تعليق الخادم، ما يسمح بمراقبة الطلبات أثناء تنفيذها وتجنب تفعيل مسار الإلغاء الناتج عن انتهاء المهلة.

تعديل السلوك مؤقتاً أثناء التشغيل

تستخدم المادة Logpoints أيضاً لاختبار أثر إصلاح أو تعديل سلوك البرنامج مؤقتاً، مع التنبيه إلى أنها مصممة أساساً للتسجيل لا لتغيير التطبيق. وباستخدام تعبيرات لها آثار جانبية، يمكن تعديل قيمة المهلة داخل مكتبة gRPC أثناء التشغيل. ويعرض المثال تغيير timeoutNanos إلى مهلة قدرها خمس دقائق.

ولتقليل أثر هذا التغيير، يمكن قصره على الطلبات التي تحمل ترويسة Debug، مع إبقاء المهلة الطبيعية لبقية الطلبات. يتضمن المثال منطقاً متعدد الأسطر يقرأ الترويسة ويعيد ضبط المهلة فقط عند تطابق قيمتها، ثم يعرض الرسالة Timeout reset للتأكد من زيارة الفرع.

ما الذي ينبغي الحذر منه؟

تحذر JetBrains من وضع حسابات ثقيلة في المسارات الساخنة، لأن تعبيرات التسجيل تُنفذ داخل الآلة الافتراضية نفسها وليست مجانية من ناحية الوقت. وتذكر أن IntelliJ IDEA 2026.2 يزيل الحمل الذي يسببه المصحح عبر instrumentation، لكن ذلك لا يلغي تكلفة التعبيرات أو التسجيل الكثيف.

كما تشير المادة إلى إمكانية استخدام ميزة Mark Object للوصول إلى كائنات عشوائية من حقل تعبير Logpoint، وإلى مهارة وكيل الذكاء الاصطناعي ij-debugger المرفقة، التي يمكنها تحديد موضع قراءة المهلة وإنشاء تعبير يستهدف طلبات الاختبار. يظل هذا المسار بديلاً عن الفهم اليدوي، لا دليلاً على أن التعديل المؤقت آمن لجميع البيئات.

القراءة التحريرية من certi.news

القيمة العملية هنا ليست في إضافة نوع جديد من رسائل السجل، بل في نقل التشخيص إلى طبقة قابلة للتعديل أثناء التشغيل. هذا مهم خصوصاً للخدمات البعيدة أو ذات حالات السباق أو المهلات الزمنية، حيث قد يؤدي إيقاف التنفيذ إلى إخفاء المشكلة نفسها. في المقابل، يتطلب الأسلوب انضباطاً في اختيار التعبيرات ومراقبة كلفتها، كما أن استخدام الآثار الجانبية لتعديل السلوك يجب أن يبقى محصوراً في سيناريوهات تصحيح واضحة ومؤقتة، لا أن يتحول إلى بديل عن إصلاح الشيفرة المصدرية.

مصدر الخبر
كيف أعددنا هذا الخبر؟

اعتمد الخبر على المصدر الأصلي الموضح أعلاه. قد نستخدم أدوات آلية للمساعدة في الاستخراج والتصنيف والصياغة، لكن النشر يخضع لقواعد تمنع المحتوى المكرر والقصير أو الروتيني منخفض القيمة. اقرأ سياستنا التحريرية.

ف
كاتب المقال

فريق تحرير certi.news

فريق التحرير

فريق تحرير certi.news يتابع المصادر التقنية ويعيد بناء الأخبار بالعربية مع مراجعة الحقائق والسياق قبل النشر.

من نفس التصنيف

مقالات قد تهمك

عرض جميع المقالات