تنظیمات پایه یا Basic Config در logging

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

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