basicConfig
برای پیکربندی logging می توانید از روش basicConfig (** kwargs)
استفاده کنید. مشاهده خواهید کرد که ماژول logging راهنمای PEP8 را شکسته و از قراردادهای نامگذاری camelCase استفاده می کند. دلیل آن این است که از Log4j ، که یک ابزار logging در جاواست استفاده شده است.این مسئله در ابتدا بود تا زمانی که تصمیم گرفته شد که از قواعد pep8 پیروی کند و همین باعث عدم تطابق با نسخه های پیشین آن شد.
برخی از پارامترهای () basicConfig به شرح زیر است:
- level: سطح امنیتی پیغام log
- filename: نام فایل برای ذخیره سازی
- filemode: در صورتی که نام فایل داده شود به صورت پیشرفض با حال a باز می شود.
- format: قالب پیغام log
استفاده از level
با استفاده از پارامتر level می توانید تنظیم کنید که چه سطحی از پیام هایlogging را ضبط کنید. این کار با عبور از یکی از ثابتهای موجود در کلاس قابل انجام است و باعث می شود که تمام پیام های بالاتر از سطح معرفی شده اجرا و چاپ شوند. به نمونه زیر دقت کنید:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
که خروجی آن به شکل زیر است:
DEBUG:root:This will get logged
در نمونه بالا می بینید که دیگر نمایش پیام هایی با سطح debug نیز ممکن شده است، در صورتی که به صورت پیشفرش پیام های سطح warning و بالاتر را نشان میداد
استفاده از filename و filemode
به همین ترتیب ،به جای اینکه پیام ها در کنسول نمایش داده شوند می توانید با استفاده از این ویژگی که به class مورد نظر اضافه می کنید قابلیت نوشتن پیام ها در فایل مشخص شده را نیز میدهید. به مثال زیر دقت نمایید.
import logging
logging.basicConfig(filename='app.log', filemode='w')
logging.warning('This will get logged to a file')
همچنین با اضافه شدن filemode هر بار که برنامه با حالت w باز میشود محتویات فایل log باز نویسی میشود و داده های قبلی پاک می شود. برای اینکه این حالت صورت نگیرد کافیست که filemode را بر روی حالت a قرار دهید و یا اصلا قید نکنید.
استفاده از format
در حالی که شما می توانید هر متنی را که نیاز دارید در خروجی log چاپ نمایید بعضی از ویژگی های از پیش نوشته شده ای هستند که می توانید در این میان از آن ها نیز استفاده کنید.که در حقیقت این عملیات ها با استفاده از مشخصه های LogRecord امکان پذیر می شوند.
به عنوان مثال اگر می خواهید که proccess id را در کنار level و message در خروجی نمایش دهید می توانید بدین صورت عمل کنید:
import logging
logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
format می تواند رشته ای را با ویژگی های LogRecord در هر ترتیبی که دوست دارید ، بگیرد. در این لینک می توانید لیستی کامل از دستورات لازم را مشاهده نمایید.
استفاده از داده های یک متغیر
در بیشتر موارد ، شما می خواهید اطلاعات پویا از برنامه خود را در کنسول وارد کنید. شما مشاهده کرده اید که در روش های logging یک رشته را به عنوان آرگومان می گیرند و ممکن است طبیعی باشد که یک رشته را با داده های متغیر در یک خط جداگانه قالب بندی کرده و به روش log منتقل کنید. اما این امر در واقع می تواند با استفاده از یک رشته فرمت برای پیام و ضمیمه کردن داده های متغیر به عنوان آرگومان انجام شود. در اینجا یک مثال آورده شده است:
import logging
name = 'John'
logging.error('%s raised an error', name)
خروجی:
ERROR:root:John raised an error
استدلال های منتقل شده در این روش به عنوان داده های متغیر در پیام گنجانده می شود.
گرچه می توانید از هر سبک قالب بندی استفاده کنید ، به عنوان مثال استفاده از format string در پیام ها که در دوره جامع پایتون با آن آشنا شدید.
import logging
name = 'John'
logging.error('{} raised an error'.format(name))
خروجی:
ERROR:root:John raised an error