آشنایی با ماژول Logging

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/04
  • تعداد بازدید: 395

logging چیست؟

logging یک ابزار بسیار مفید در جعبه ابزار برنامه نویس است، که به توسعه و درک بهتر دیاگرام کد کمک می کند و حتی ممکن است کمک به یافتن سناریو هایی شود که در ابتدا متوجه آن نبودید.

log ها برای توسعه دهندگان نقش یک چشم اضافه را ایفا می کند که در حین اجرای کد ساختار های مختلف را با نشانگذاری های متعددی که در جریان اجرا اتفاق می افتاد آگاه می کند. می توانند اطلاعات را ذخیره و نمایش دهند، به عنوان مثال در حین انجام کار چه کاربری و با چه آدرس IP وارد سیستم شد. در صورت رخداد یک خطا می توانند اطلاعات بیشتری نسبت به عمل صورت گرفته در اختیار توسعه دهنده قرار دهد و با استفاده از این اطلاعات می توان سریعتر و راحت تر ایراد را پیدا و برطرف کرد.

با جمع آوری اطلاعات از جایگاه های درست شما نه تنها می توانید به راحتی ایرادات را شناسایی کنید بلکه می توانید از همان اطلاعات برای تشخیص کارایی و سرعت اجرای کد و مقایس پذیری آن نیز بهره گیری کنید.

پایتون ماژول logging را به عنوان بخشی از المان های پیش فرض خود در اختیار کاربر قرار می دهد و نیازی به نصب آن نیست.

چرا logging را بایستی استفاده کرد

تصور کنید که از یک اسکریپت پایتون استفاده می کنید و می خواهید بدانید که چه بخشی از اسکریپت اجرا شده است ، در چه زمان و در موارد خاص بازرسی مقادیر متغیرها را بررسی می کند.به طور معمول، ممکن است که فقط از print برای پیغام های معنی دار در حین اجرا کد خود استفاده کرده باشید. و در حقیقت شاید این تنها چیزی باشد که شما نیاز داشته باشید. مشکل از آن جا شروع می شود که وقتی از ماژول های متعدد در کد خود استفاده می کنید دیگر فقط با print کردن نمی توانید اوضاع کار برنامه خود را کنترل کنید، و لازم است از یک ساختار بهتر پیروی کنید.زیرا ، کد می تواند مراحل مختلفی را طی کند ، مانند توسعه ، رفع اشکال ، بررسی ، آزمایش یا تولید ، شما می خواهید سطوح مختلفی از جزئیات را در پیام های چاپ شده مشاهده کنید.

Logger چیست؟

logger در حقیقت یک Entry Point یا درگاه ورودی است. هر logger یک سطل نامگذاری شده است که می توان پیام ها را برای پردازش به آن وارد کرد.

یک logger برای داشتن سطح log پیکربندی شده است. این سطح ورود به سیستم سطح پیام هایی را که logger مدیریت می کند توصیف می کند. که بدین شکل تعریف شده اند:

  • Debug = 10
  • Info = 20
  • Warning = 30
  • Error = 40
  • Critical = 50

اعدادی که در کنار این این سطوح مشاهده می کنید در حقیقت مقدار عددی برابر با این سطوح هستش که در زمان برنامه نویسی به آن اشاره خواهیم کرد.

Debug

اطلاعات سطح پایین سیستم برای اهداف اشکال زدایی که در واقع می توان از آن برای دنبال کردن تغییرات متغیر ها و یا اعمالی که با خروجی های تست در برنامه نویسی درگیر هستند استفاده کرد.

Info

اطلاعات عمومی سیستم و رخداد های طبیعی سیستم مثل ورود یک شخص به صفحه مورد نظر و یا اینکه سرویس اجرا شده بر روی چه پورتی قرار گرفته و یا هر اطلاعاتی که نقش یادآوری و نشان دادن عملکرد کلی سیستم را در حین اجرا دارد.

Warning

اطلاعات توصیف یک مشکل جزئی که رخ داده است. این رخداد معمولا خطایی در سیستم است که تنها نیاز به یادآوری دارد و هنوز باعث تحریب بخشی از عملکرد نشده است و جنبه هشدار دارد.

Error

اطلاعات مربوط به توصیف یک مشکل اساسی که رخ داده است.

Critical

اطلاعات توصیف یک مشکل مهم که در سیستم رخ داده است و عملکرد سیستم را مختل و یا از کار انداخته است و می بایستی به سرعت رسیدگی شود.

هر پیامی که برای logger نوشته می شود یک Log Record است. هر رکورد ثبت نیز دارای یک سطح ورود به سیستم است که سطح آن پیام خاص را نشان می دهد. یک سابقه ثبت می تواند حاوی فراداده های مفیدی باشد که رویدادی را که ثبت شده است توصیف می کند. این می تواند شامل جزئیاتی مانند ردیابی پشته یا کد خطا باشد.

اولین تست

حال نوبت آن رسیده تا حداقل یک نمونه ساده استفاده از logging را مشاهده کنید. قطعه کد زیر را در نظر گرفته و آن را امتحان کنید:

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

خروجی:

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

خروجی نمایانگر سطوح مختلف اطلاعات نمایش داده شده در کنار root است، که نام ماژول و یا فایلی است که از آن در حال log گیری هستید.فرمتی که مشاهده می کنید استاندارد اولیه logging است که  در زیر نمایش داده شده است:

log level : file name or module : message

توجه داشته باشید که پیام های debug وinfo  وارد نمایش داده نشده اند. این به این دلیل است که ، به طور پیش فرض ، ماژول logging پییغام های بالاتر از سطح WARNING یا بالاتر را نمایش می دهد. در صورت تمایل می توانید با پیکربندی ماژول logging  ، آن را تغییر دهید تا رویدادها را از همه سطوح ثبت کند. با تغییر در پیکربندی ها می توانید سطح طبقه بندی خود را نیز تعیین کنید ، اما به طور کلی توصیه نمی شود زیرا باعث ایجاد سردرگمی در گزارش برخی از کتابخانه های دیگر می شود که ممکن است از آنها استفاده کنید.