تاکنون ، ثبت کننده پیش فرض به نام root را مشاهده کرده ایم ، که هر زمان که عملکردهای آن مستقیماً به این صورت فراخوانی شود ، توسط ماژول logging استفاده می شود: logging.debug ()
. شما می توانید (و باید) logger خود را با ایجاد یک شی از کلاس Logger تعریف کنید ، مخصوصاً اگر برنامه شما چندین ماژول داشته باشد. بیایید نگاهی به برخی از کلاس ها و توابع ماژول بیندازیم.
کلاسهای متداول استفاده شده در ماژول logging به شرح زیر است:
- Logger: این کلاسی است که اشیا برای فراخوانی توابع مستقیماً در کد برنامه استفاده می شوند.
- LogRecord: لاگرها بطور خودکار اشیا LogRecord را ایجاد می کنند که دارای تمام اطلاعات مربوط به رویداد ثبت شده است ، مانند نام ثبت کننده ، عملکرد ، شماره خط ، پیام و موارد دیگر.
- Handler: کنترل کننده ها LogRecord را به مقصد خروجی مورد نیاز ، مانند کنسول یا یک پرونده می فرستند. Handler پایه ای برای زیر کلاس های مانند StreamHandler ، FileHandler ، SMTPHandler ، HTTPHandler و موارد دیگر است. این زیر کلاس ها خروجی های ورود به سیستم را به مقصد مربوطه مانند sys.stdout یا یک پرونده دیسک ارسال می کنند.
- Formatter: این جایی است که شما با تعیین قالب رشته ای که خصوصیاتی را که باید خروجی داشته باشد لیست می کند ، قالب خروجی را مشخص می کنید.
از این موارد ، ما بیشتر با object های کلاس Logger سروکار داریم که با استفاده از تابع logging.getLogger
در سطح ماژول نمونه سازی می شوند. چندین اتصال با getLogger ()
با همان نام ، مرجعی را به همان شی Logger برمی گرداند ، که باعث می شود ما نتوانیم object هایlog logger را به هر بخشی که لازم است منتقل کنیم. در اینجا یک مثال آورده شده است:
import logging
logger = logging.getLogger('example_logger')
logger.warning('This is a warning')
خروجی:
This is a warning
در بالا یک logger سفارشی به نام example_logger ایجاد می شود، اما بر خلاف root logger ، نام logger سفارشی بخشی از قالب خروجی پیش فرض نیست و باید به پیکربندی اضافه شود. پیکربندی آن در یک قالب برای نشان دادن نام ثبت کننده ، خروجی مانند این را می دهد:
WARNING:example_logger:This is a warning
توجه داشته باشید که ، برخلاف root logger ، یک ثبت کننده سفارشی نمی تواند با استفاده از basicConfig ()
پیکربندی شود. شما باید آن را با استفاده از Handlers and Formatters پیکربندی کنید.
توصیه می شود که ما با استفاده از __name__ به عنوان پارامتر نام به getLogger () از logger های سطح ماژول استفاده کنیم تا یک شی logger ایجاد کنیم همانطور که خود نام logger به ما می گوید از کجا وقایع ثبت می شوند. __name__ یک متغیر داخلی در پایتون است که به نام ماژول فعلی ارزیابی می شود.