یک تابع پایتون بنویسید که با دریافت نام logger، سطح لاگ (مثل 'INFO' یا 'DEBUG') و متن پیام، یک logger موقت بسازد، پیام را لاگ کند و خروجی تولیدشده توسط logger را به‌صورت یک رشته بازگرداند.

1.0 بازدید آخرین ویرایش در 221 روز قبل ساعت 01:38

0.0

برای حل این مسئله از ماژول logging و io.StringIO استفاده کنید: یک StringIO بسازید و یک StreamHandler به آن متصل کنید، Formatter مناسب مانند "%(levelname)s:%(message)s" تنظیم کنید، logger را با سطح داده‌شده پیکربندی کنید (مثلاً getattr(logging, level)), logger.propagate = False قرار دهید تا پیام دو بار چاپ نشود، پیام را لاگ کنید، خروجی StringIO را با getvalue() خوانده و در پایان handler را حذف کنید تا اثر جانبی باقی نماند. برای تست خودکار می‌توانید از doctest استفاده کنید؛ مثال doctest ساده: >>> capture_log('mylog', 'INFO', 'hello') 'INFO:hello\n' نکته‌ها: حتما handler را بعد از دریافت خروجی از logger حذف یا ببندید و سطح logger را درست تنظیم کنید تا تست‌ها مستقل باشند.

توسط پژوهشگر در 221 روز قبل ساعت 01:38
دسته بندی ها: Python Python for beginner
arman در 221 روز قبل ساعت 12:30

برای پیاده‌سازی تابع کپچر لاگ از StringIO و StreamHandler استفاده کنید تا خروجی لاگ در یک رشته قابل تست باشد. سطح لاگ را با getattr(logging, level) تنظیم کنید و از logger.propagate = False برای جلوگیری از چاپ دوباره استفاده کنید. حتماً پس از خواندن خروجی، handler را حذف و ببندید تا اثر جانبی روی سایر بخش‌ها باقی نماند. برای تست می‌توانید doctest یا pytest را به کار ببرید و خروجی مثل "INFO:hello\n" را اعتبارسنجی کنید.

گزارش

1 پاسخ

جدید ترین قدیمی ترین بالاترین امتیاز پاسخ های من

در حال بارگیری...
ورود به حساب کاربری