متد های دیگر تنظیمات در logging

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

می توانید logging را به طریقی دیگر با استفاده از ماژول و توابع کلاس یا با ایجاد یک فایل پیکربندی یا dictionary و بارگیری آن به ترتیب با استفاده از fileConfig () یا dictConfig () پیکربندی کنید. این موارد در صورتی مفید است که بخواهید پیکربندی ورود به سیستم خود را در یک برنامه در حال اجرا تغییر دهید.

در اینجا مثالی از پیکربندی وجود دارد:

[loggers]
keys=root,sampleLogger

[handlers]
keys=consoleHandler

[formatters]
keys=sampleFormatter

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_sampleLogger]
level=DEBUG
handlers=consoleHandler
qualname=sampleLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=sampleFormatter
args=(sys.stdout,)

[formatter_sampleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

در فایل فوق ، دو logger وجود دارد ، یک handler و یک formatter. پس از مشخص شدن نام آنها ، با اضافه کردن کلمات logger ، handler و formatter قبل از اینکه نام آنها با یک زیر خط جدا شود ، پیکربندی می شوند.

برای بارگذاری این پرونده پیکربندی ، باید از () fileConfig استفاده کنید:

import logging
import logging.config

logging.config.fileConfig(fname='file.conf', disable_existing_loggers=False)

# Get the logger specified in the file
logger = logging.getLogger(__name__)

logger.debug('This is a debug message')

خروجی:

2018-07-13 13:57:45,467 - __main__ - DEBUG - This is a debug message

مسیر فایل پیکربندی به عنوان یک پارامتر به متد () fileConfig منتقل می شود و از پارامتر disable_existing_loggers برای نگهداری یا غیرفعال کردن logger هایی که هنگام فراخوانی عملکرد وجود دارند استفاده می شود. در صورت عدم ذکر ، به صورت پیش فرض به True تبدیل می شود.

در اینجا همان پیکربندی در قالب YAML برای رویکرد دیکشنری وجود دارد:

version: 1
formatters:
  simple:
    format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
handlers:
  console:
    class: logging.StreamHandler
    level: DEBUG
    formatter: simple
    stream: ext://sys.stdout
loggers:
  sampleLogger:
    level: DEBUG
    handlers: [console]
    propagate: no
root:
  level: DEBUG
  handlers: [console]

در اینجا مثالی آورده شده است که نحوه بارگیری پیکربندی را از یک فایل yaml نشان می دهد:

import logging
import logging.config
import yaml

with open('config.yaml', 'r') as f:
    config = yaml.safe_load(f.read())
    logging.config.dictConfig(config)

logger = logging.getLogger(__name__)

logger.debug('This is a debug message')

خروجی:

2018-07-13 14:05:03,766 - __main__ - DEBUG - This is a debug message