تقنية

NullHandler في بايثون: لماذا لا يطبع استدعاء handle الرسالة؟

مخزن فارغ مع NullHandler ورسالة R مع StreamHandler
مقارنة باستدعاء مباشر. [1] [2]

نمرر سجلًا مؤلفًا إلى معالج محدد مباشرة. [1] [2]

الخلاصة السريعة

لا ينتج NullHandler.handle خرجًا هنا. [1] [2]

  • هذا المعالج لا ينسق الرسائل أو يطبعها. [1] [2]
  • نؤلف سجلًا برسالة R. [1] [2]
  • نلتقط stderr في مخزن ذاكرة. [1] [2]
  • بعد الاستدعاء يبقى المخزن فارغًا؛ الناتج ''. [1] [2]
  • اختبرنا 3.12.14؛ لا نفحص إعدادات Logger. [1] [2]

المثال

import logging as l,io,contextlib
b=io.StringIO()
r=l.makeLogRecord({'msg':'R'})
with contextlib.redirect_stderr(b):
    l.NullHandler().handle(r)
print(repr(b.getvalue()))

[1] [2]

الناتج '' تمثيل سلسلة فارغة. [1] [2]

لماذا لم تظهر الرسالة؟

المعالج يترك الاستدعاء دون خرج. في اختبار مقابل، كتب StreamHandler(b) الرسالة وسطرًا جديدًا إلى المخزن نفسه. [1] [2]

الفحص للاستدعاء المباشر لا لإعداد Logger كله
حدود الدليل. [1] [2]

حدود التجربة

هذه مقارنة لاستدعاء مباشر في الذاكرة. لا تثبت تعطيل التسجيل في تطبيق كامل أو سلوك بقية معالجاته. [1] [2]

المراجع

  1. Python: logging handlers
  2. CPython 3.12.14: logging/__init__.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

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