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