logging، و5
مستويات للسجلات في Python، ومعالجة الأخطاء في Python، وأنواع أخطاء Python
الشائعة. وترسل الأقسام الأخيرة السجلات والأعطال نفسها إلى LogBrew باستخدام
logbrew-sdk 0.1.29. شُغّل كل مثال على Python 3.13، وتعرض كل كتلة مخرجات
مخرجاتها الفعلية.
لتطبيق Flask، استخدم سجلات Flask بدلًا من هذا الدليل. فهو
يضيف تتبّعات الطلبات إلى إعداد السجلات نفسه.
اكتب أول سجل في Python
احفظ هذا الملف باسمapp.py. استدعِ logging.basicConfig() مرة واحدة عند نقطة
دخول البرنامج. أنشئ مسجِّلًا باسم خاص في كل وحدة.
python3 app.py. تذهب المخرجات إلى مجرى الخطأ القياسي.
debug لأن المستوى هو INFO. يسجّل logger.exception() بالمستوى
ERROR ويضيف تتبّع المكدّس (traceback). استدعِه داخل كتلة except فقط.
مرّر القيم كوسائط، كما في "payment retry %d of %d", 2, 3. لا يبني Python
الرسالة إلا عندما يقبل أحد المعالجات السجل. ويبقى قالب الرسالة ثابتًا في كل
إعادة محاولة، لذلك يمكنك البحث عنه.
مستويات السجلات في Python
يرسل المسجِّل السجل فقط عندما يكون مستوى السجل مساويًا لمستوى المسجِّل أو أعلى منه. ويمكن للمعالج أن يضبط مستوى ثانيًا أعلى.
يبدأ المسجِّل الجذري بالمستوى
WARNING. ويكون مستوى المسجِّل الجديد NOTSET
(0)، فيستخدم مستوى المسجِّل الأب. اضبط INFO في بيئة الإنتاج، واضبط DEBUG في
التطوير فقط أو لتشخيص قصير.
المسجِّلات والمعالجات والمنسِّقات
- يستقبل المسجِّل الاستدعاء. استخدم
logging.getLogger(__name__)ليتبع اسم المسجِّل مسار الوحدة. - يرسل المعالج السجلات إلى وجهة، مثل وحدة التحكم أو ملف أو LogBrew.
- يحوّل المنسِّق السجل إلى نص.
logging.NullHandler() فقط إلى
مسجِّلها الخاص. ويضبط التطبيق المعالجات والمستويات مرة واحدة. للإعدادات الكبيرة،
استخدم logging.config.dictConfig().
معالجة الأخطاء في Python
التقط الاستثناء الأكثر تحديدًا الذي يمكنك معالجته. استخدمelse للشيفرة التي
تعمل عند النجاح فقط، واستخدم finally للشيفرة التي تعمل دائمًا. استخدم
raise ... from error للاحتفاظ بالسبب الأصلي.
احفظ هذا الملف باسم orders.py.
- سجّل الاستثناء مرة واحدة، في المكان الذي تعالجه فيه. لا تسجّله ثم تُعِد رفعه في كل طبقة، لأن كل طبقة تضيف سجلًا مكررًا.
- لا تكتب
except Exception: pass. إذا تجاهلت خطأً، فسجّله بالمستوىWARNINGأو أعلى مع ذكر السبب. - التقط
ExceptionوليسBaseException. يلتقطBaseExceptionأيضًاKeyboardInterruptوSystemExit، وهما يوقفان البرنامج عن قصد. - عرّف أصناف استثناءات خاصة بك للأخطاء التي يجب على المستدعين معالجتها، كما يفعل
OrderError.
أبلغ عن أكثر من خطأ
يستطيع Python 3.11 والإصدارات الأحدث رفعExceptionGroup. استخدمه عندما يجد فحص
واحد أكثر من خلل. عالج كل نوع باستخدام except*.
أنواع أخطاء Python الشائعة
ترث كل الأخطاء المضمّنة التي يستطيع البرنامج معالجتها منException. يسرد هذا
الجدول أخطاء Python الأكثر ظهورًا وأول ما تفحصه في كل منها.
يرث
KeyboardInterrupt وSystemExit من BaseException وليس من Exception.
فهما ليسا أخطاءً في شيفرتك.
أرسل سجلات Python إلى LogBrew
LogBrewLoggingHandler معالج سجلات قياسي. يرسل إلى LogBrew كل سجل يقبله. ويبقى
معالج وحدة التحكم كما هو.
1
أنشئ مفتاحًا للمشروع
سجّل الدخول باستخدام الـ CLI. أنشئ مشروعًا وخزّن مفتاح
الاستيعاب الخاص به في ملف لا يقرؤه إلا مالكه.لا يطبع الـ CLI المفتاح. في بيئة الإنتاج، استخدم مدير الأسرار في منصتك.
2
ثبّت الـ SDK
فعّل البيئة الافتراضية للتطبيق. ثم ثبّت الحزمة. تتطلب الحزمة Python 3.10 أو
أحدث.
3
اضبط المفتاح وهوية النشر
4
أضف المعالج
احفظ هذا الملف باسم يرسل
worker.py. استدعِ logging.basicConfig() قبل إنشاء
العميل. يضيف العميل معالجًا إلى المسجِّل الجذري، ولا يفعل basicConfig()
شيئًا إذا كان للمسجِّل الجذري معالج بالفعل.HttpTransport() الأحداث في الخلفية بعد ثانية واحدة من أول حدث أو عند
بلوغ 50 حدثًا. ويرسل client.shutdown() الأحداث المتبقية ويغلق العميل.5
شغّل البرنامج
extra={...} بيانات وصفية. يحمل الحدث الثاني
exceptionName بالقيمة KeyError وexceptionMessage بالقيمة 'seats'.
لإرسال نص تتبّع المكدّس كاملًا، أنشئ المعالج مع
include_exception_text=True.6
اقرأ السجلات المخزّنة
اختر السجلات التي تصل إلى LogBrew
امنح المعالج مستواه الخاص لترسل سجلات أقل. وتظل وحدة التحكم تتلقىINFO وما
فوقه.
أبلغ عن أعطال Python كمشكلات
يُبلغinstall_process_error_capture(client) عن الاستثناءات غير الملتقَطة في
السكربتات والعمليات العاملة (workers) وشيفرة بدء التشغيل والخيوط. يصبح كل تعطّل
مشكلة واحدة تحمل نوع الاستثناء والرسالة وإطارات المكدّس والأسباب المتسلسلة. ويظل
Python يطبع تتبّع المكدّس ويخرج كما كان يفعل من قبل.
احفظ هذا الملف باسم startup.py وشغّله.
FileNotFoundError والمستوى critical والآلية
python.excepthook. تحتوي إطاراتها على اسم الملف والسطر والدالة، لكن دون المسار
الكامل. ويكون مستوى التعطّل داخل خيط هو error. قبل أن يخرج Python، ينتظر الـ
SDK اكتمال التسليم مدة ثانيتين على الأكثر.
استكشاف الأخطاء وإصلاحها
لتطبيقات الويب، راجع سجلات Flask. لاختيار تنسيق السجلات،
راجع التسجيل المنظم. لبيئات التشغيل الأخرى،
راجع دمج SDK.
