في عالم البرمجة باستخدام لغة Python 3، يُعتبر التسجيل (Logging) من أدوات تتيح للمطورين تسجيل الأحداث والمعلومات الخاصة بتنفيذ البرنامج. يُعتبر هذا أمرًا ضروريًا لفهم سير تنفيذ البرنامج وتحديد الأخطاء بشكل فعال. لنستكشف كيفية استخدام نظام التسجيل في Python 3 بشكل مفصل.
في البداية، يمكننا استيراد مكتبة التسجيل (logging
) في Python:
pythonimport logging
بعد ذلك، يمكننا تكوين إعدادات التسجيل وتحديد مستوى التسجيل الذي نرغب في رصده. يوفر نظام التسجيل مستويات متعددة، مثل DEBUG
، INFO
، WARNING
، ERROR
، و CRITICAL
. لتحديد مستوى التسجيل، يمكننا استخدام الأمر التالي:
pythonlogging.basicConfig(level=logging.DEBUG)
يُمكن استخدام هذا الأمر لتحديد مستوى التسجيل الأدنى الذي سيتم عرضه. على سبيل المثال، في المثال أعلاه، سيتم عرض جميع الرسائل من مستوى DEBUG
وما فوق.
الخطوة التالية تشمل إعداد محدد (logger) لتسجيل الرسائل. يمكن القيام بذلك باستخدام الأمر التالي:
pythonlogger = logging.getLogger(__name__)
في هذا المثال، يُستخدم __name__
للحصول على اسم الوحدة (module) الحالية. يمكن استخدام أسماء مختلفة حسب الحاجة.
بعد تكوين المحدد، يُمكن استخدامه لتسجيل الرسائل بواسطة استخدام الأوامر المختلفة مثل debug
، info
، warning
، error
، و critical
. على سبيل المثال:
pythonlogger.debug("رسالة تصحيح")
logger.info("رسالة معلوماتية")
logger.warning("تحذير: هناك شيء ما يحدث!")
logger.error("خطأ: حدث خطأ غير متوقع")
logger.critical("تحذير حرج: النظام قد توقف")
يمكن توجيه رسائل التسجيل إلى مصادر متعددة مثل ملفات السجل أو الإخراج على الشاشة. يمكن تحقيق ذلك عن طريق تكوين المعالجات (handlers). على سبيل المثال:
pythonfile_handler = logging.FileHandler('logfile.txt')
console_handler = logging.StreamHandler()
file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_formatter = logging.Formatter('%(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
console_handler.setFormatter(console_formatter)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
في هذا المثال، يتم إنشاء معالجين للتسجيل، أحدهما لملف السجل والآخر للإخراج على الشاشة. يمكن تحديد تنسيق لكل معالج باستخدام Formatter
.
هذه النقاط تمثل مقدمة عن استخدام نظام التسجيل في Python 3. يمكن تخصيصه بشكل متقدم لتلبية احتياجات التسجيل الخاصة بمشروعك. يجب مراعاة أن استخدام نظام التسجيل يساعد في فحص الأخطاء وفهم سير تنفيذ البرنامج بشكل أفضل، مما يسهم في تحسين جودة البرمجيات وتسريع عملية تصحيح الأخطاء.
المزيد من المعلومات
بالطبع، دعونا نواصل استكشاف المزيد من المعلومات حول نظام التسجيل في Python 3.
تحديد مكان تخزين رسائل التسجيل:
تعتبر مكتبة التسجيل مرنة فيما يتعلق بتحديد مكان تخزين رسائل التسجيل. يمكنك تحديد مستوى التسجيل لكل محدد بشكل فردي أو حتى لكل معالج. على سبيل المثال:
pythonlogger.setLevel(logging.DEBUG) file_handler.setLevel(logging.WARNING) console_handler.setLevel(logging.INFO)
في هذا المثال، يتم تحديد مستوى التسجيل للمحدد الرئيسي logger
على مستوى DEBUG
، بينما يتم تحديد مستوى التسجيل لمعالج الملف على مستوى WARNING
ومعالج الشاشة على مستوى INFO
. هذا يعني أن المحدد سيسجل جميع الرسائل، في حين يتم تصفية الرسائل التي يقوم بها كل معالج بناءً على مستوى التسجيل المحدد.
تخصيص تنسيق الرسائل:
يمكن تخصيص تنسيق الرسائل باستخدام الفئة Formatter
. يمكن تعيين تنسيق مختلف لكل معالج. على سبيل المثال:
pythonfile_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_formatter = logging.Formatter('%(levelname)s - %(message)s')
file_handler.setFormatter(file_formatter)
console_handler.setFormatter(console_formatter)
هنا، يتم تعيين تنسيق معين لمعالج الملف وتنسيق آخر لمعالج الشاشة. يمكنك تخصيص السلوك الدقيق لكل رسالة من خلال تعيين تنسيق خاص بها.
استخدام تكوين خاص:
يمكن استخدام ملفات تكوين خاصة لتكوين نظام التسجيل. يمكن تحميل تكوين من ملف باستخدام الأمر التالي:
pythonlogging.config.fileConfig('logging_config.ini')
وفي الملف logging_config.ini
يمكن تحديد إعدادات مختلفة مثل مستوى التسجيل ومعالجات التسجيل.
التعامل مع ملفات السجل المتداولة:
يمكن تكوين معالج لتحقيق تدوير تلقائي لملفات السجل. يعني ذلك أنه يمكن تحديد حد أقصى لحجم الملف أو تحديد عدد معين من الملفات قبل أن يبدأ في تدويرها. على سبيل المثال:
pythonfrom logging.handlers import RotatingFileHandler
rotating_handler = RotatingFileHandler('app.log', maxBytes=1024, backupCount=3)
في هذا المثال، يمكن للمعالج التدويري التحكم في حجم الملفات وعدد الملفات المخزنة قبل التدوير.
التعامل مع الأحداث والأستثناءات:
يمكن أيضًا استخدام نظام التسجيل لتسجيل الأحداث والأستثناءات. يمكن تحديد معالج خاص لتسجيل الأحداث الناتجة عن تفعيل معين. على سبيل المثال:
pythonfrom logging import FileHandler
from my_custom_module import CustomEvent
custom_handler = FileHandler('custom_events.log')
logger.addHandler(custom_handler)
def some_function():
# ...
logger.info("Function executed successfully")
if some_condition:
logger.warning("Custom event occurred", exc_info=True, extra={'event_type': 'custom_event'})
CustomEvent().trigger()
في هذا المثال، يتم تحديد نوع الحدث كـ ‘custom_event’ ويتم تسجيل الأحداث المتعلقة به باستخدام معالج خاص.
تلك هي بعض النقاط الإضافية التي توفر لك رؤية أعمق حول كيفية استخدام نظام التسجيل في Python 3. يمكن تخصيص هذا النظام بشكل كبير وفقًا لاحتياجات مشروعك، مما يجعله أداة قوية لتحسين جودة البرمجيات وتبسيط عمليات تصحيح الأخطاء.