ردگیری عملکرد در exception

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

ماژول logging  به شما امکان می دهد رد پشته های کامل در یک برنامه را ضبط کنید. اگر پارامتر exc_info به عنوان True ثبت شود ، اطلاعات exception رخ داده در برنامه را نیز می توان در log نمایش داد. به نمونه زیر توجه نمایید:

import logging

a = 5
b = 0

try:
  c = a / b
except Exception as e:
  logging.error("Exception occurred", exc_info=True)

خروجی:

ERROR:root:Exception occurred
Traceback (most recent call last):
  File "exceptions.py", line 6, in <module>
    c = a / b
ZeroDivisionError: division by zero

اگر exc_info روی True تنظیم نشود ، خروجی برنامه فوق چیزی درباره Exception به ما نمی گوید ، که در یک سناریوی واقعی ممکن است به سادگی یک ZeroDivisionError نباشد. تصور کنید که می خواهید خطایی را در یک کد پیچیده با یک log که فقط این را نشان می دهد رفع اشکال کنید. خروجی نمایشی مشابه زیر خواهد بود که اطلاعات جامعی از مشکل ایجاد شده نخواهد داد:

ERROR:root:Exception occurred

در اینجا یک نکته وجود دارد، اگر از logging برای exception استفاده می کنید ، از روش logging.exception () استفاده کنید ، که یک پیام را با ERROR سطح ثبت می کند و اطلاعات exception را به پیام اضافه می کند. به بیان ساده تر ، فراخوانی logging.exception () مانند فراخوانی logging.error است (exc_info = True). اما از آنجا که این روش همیشه اطلاعات استثنا را dump می کند ، فقط باید از یک exception handler فراخوانی شود. به مثال زیر توجه نمایید:

import logging

a = 5
b = 0
try:
  c = a / b
except Exception as e:
  logging.exception("Exception occurred")

خروجی:

ERROR:root:Exception occurred
Traceback (most recent call last):
  File "exceptions.py", line 6, in <module>
    c = a / b
ZeroDivisionError: division by zero

با استفاده از logging.exception () یک log در سطح ERROR نشان داده می شود. اگر چنین چیزی را نمی خواهید ، می توانید سایر روش هایlogging  را از debug تا critical فراخوانی کرده و پارامتر exc_info را به عنوان True ثبت کنید.