سؤال

وأريد أن توحيد سيلة لتسجيل كله على تطبيقي. أي تحذير من رفع استثناء، بجانب I قبض عليه ونقله إلى المسجل. ولكن السؤال: هل هناك في تسجيل أي مرفق أخرس؟ أحيانا يصبح مسجل مطول جدا. في بعض الأحيان لسبب من التحذيرات صاخبة جدا، هو أن هناك أي حد مطول في التحذيرات؟

http://docs.python.org/library/logging.html

http://docs.python.org/library/warnings.html

هل كانت مفيدة؟

المحلول

وليس فقط هي هناك ، ولكن هناك من تكوين عليها . إذا كنت تستخدم الأجسام logger المسماة (على سبيل المثال، logger = logging.getLogger(...)) ثم يمكنك تكوين بشكل مناسب. والتي تمكنك من تكوين الإسهاب على أساس الفرعي تلو الفرعي حيث <م> الفرعي تم تعريفه من قبل التسلسل الهرمي تسجيل.

والخيار الآخر هو استخدام logging.Filter و <أ href ل = "http://docs.python.org/library/warnings.html#the-warnings-filter" يختلط = "نوفولو noreferrer"> مرشحات تحذير للحد من الانتاج. أنا لم تستخدم هذه الطريقة من قبل ولكن يبدو أنه قد يكون مناسبا أفضل لاحتياجاتك.

PEP-282 قراءة للحصول على وصف النثر الجيد لل حزمة logging بيثون. أعتقد أنه يصف وظيفة أفضل بكثير من وثائق وحدة لا.

تحرير بعد توضيح

وكنت قد تكون قادرة على التعامل مع الجزء تسجيل هذا باستخدام فئة مخصصة تستند logging.Logger والمسجلة لدى logging.setLoggerClass(). حقا يبدو وكأنه كنت تريد شيئا من هذا القبيل إلى سجل النظام في "آخر رسالة كررت 9 مرات" . للأسف أنا لا أعرف لتنفيذ هذا في أي مكان. قد ترغب في معرفة ما إذا كان twisted.python.log الدعم هذه الوظيفة.

نصائح أخرى

ومن المصدر ذاته الذي ذكرته. هناك مستويات السجل، استخدم بحكمة؛ -)

LEVELS = {'debug': logging.DEBUG,
          'info': logging.INFO,
          'warning': logging.WARNING,
          'error': logging.ERROR,
          'critical': logging.CRITICAL}

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

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

import logging
from traceback import format_exc
logger = logging.getLogger() # Gives the root logger.  Change this for better organization
# Add your appenders or what have you
def handle_error(e):
    logger.error("Unexpected error found")
    logger.warn(format_exc()) #put the traceback in the log at lower level
    ... #Your recovery code
def do_stuff():
    logger.info("Program started")
    ... #Your main code
    logger.info("Stuff done")
if __name__ == "__main__":
    try:
        do_stuff()
    except Exception,e:
        handle_error(e)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top