بيثون تسجيل Smtphandler - مناولة خادم SMTP حاليا
سؤال
لقد قمت بإعداد وحدة التسجيل للحصول على البرنامج النصي الجديد Python الجديد. لدي معالجان، واحد إرسال الأشياء إلى ملف، وواحد لتنبيهات البريد الإلكتروني. Smtphandler هو الإعداد على إرسال أي شيء في مستوى الخطأ أو أعلى.
كل شيء يعمل بشكل رائع، ما لم يفشل اتصال SMTP. إذا كان خادم SMTP لا يستجيب أو فشل المصادقة (يتطلب مصادقة SMTP)، فسوف يموت البرنامج النصي بالكامل.
أنا جديد إلى حد ما بالنسبة إلى Python، لذلك أحاول معرفة كيفية التقاط الاستثناء الذي يثيره Smtphandler بحيث لن يؤدي أي مشاكل ترسل رسالة السجل عبر البريد الإلكتروني إلى أسفل البرنامج النصي بالكامل. نظرا لأنني أكتب أخطاء أيضا إلى ملف السجل، في حالة فشل تنبيه SMTP، أريد فقط أن أستمر في الذهاب، وليس إيقاف أي شيء.
إذا كنت بحاجة إلى عبارة "TRY:"، فهل ستذهب حول تسجيل الدخول. الإعداد.
المحلول
يجب عدم إيقاف الاستثناءات التي تحدث أثناء التسجيل البرنامج النصي الخاص بك، على الرغم من أنها قد تتسبب في طباعة Traceback sys.stderr
. وبعد من أجل منع هذه النسخة المطبوعة، قم بما يلي:
logging.raiseExceptions = 0
هذا ليس الافتراضي (لأنه في التطوير الذي تريده عادة معرفة الفشل) ولكن في الإنتاج، raiseExceptions
لا ينبغي تعيين.
يجب أن تجد أن SMTPHandler
سيحاول إعادة الاتصال في المرة التالية التي يتم تسجيل خطأ (أو أعلى).
logging
يفعل يمر من خلال SystemExit
و KeyboardInterrupt
استثناءات، ولكن يجب معالجة جميع الآخرين حتى لا يسببون إنهاء تطبيق يستخدم التسجيل. إذا وجدت أن هذا ليس هو الحال، فيرجى نشر تفاصيل محددة من الاستثناءات التي تمن خلالها وتسبب في إنهاء البرنامج النصي الخاص بك، وعن إصدار نظام تشغيل Python / التشغيل. ضع في اعتبارك أن البرنامج النصي قد يبدو أن تعلق إذا كان هناك مهلة شبكة تسبب حظر المعالج (على سبيل المثال إذا استغرق البحث عن DNS وقتا طويلا، أو إذا استغرق اتصال SMTP وقتا طويلا).
نصائح أخرى
ربما تحتاج إلى القيام كليهما. لمعرفة ذلك، أقترح تثبيت خادم بريد محلي واستخدام ذلك. بهذه الطريقة، يمكنك إيقاف تشغيله أثناء تشغيل البرنامج النصي وللاحظ رسالة الخطأ.
لإبقاء الكود الصيني، يجب أن تمتد Smtphandler بطريقة يمكنك التعامل مع الاستثناءات في مكان واحد (بدلا من التغليف كل مكالمة مسجل مع TRY-PACK).