Автостопом по Python | страница 71



). Минимальный файл конфигурации будет выглядеть так:

>[loggers]

>keys=root


>[handlers]

>keys=stream_handler


>[formatters]

>keys=formatter


>[logger_root]

>level=DEBUG

>handlers=stream_handler


>[handler_stream_handler]

>class=StreamHandler

>level=DEBUG

>formatter=formatter

>args=(sys.stderr,)


>[formatter_formatter]

>format=%(asctime)s %(name)-12s %(levelname)-8s %(message)s

asctime, name, levelname и message являются необязательными атрибутами библиотеки журналирования. Полный список доступных вариантов и их описание смотрите в документации Pytho (http://bit.ly/logrecord-attributes). Предположим, что наша конфигурация журналирования называется logging_conf.ini. Для того чтобы настроить средства ведения журнала с помощью этой конфигурации в коде, используем функцию logging.config.fileconfig():

>import logging

>from logging.config import fileConfig


>fileConfig('logging_config.ini')

>logger = logging.getLogger()

>logger.debug('often makes a very good meal of %s', 'visiting tourists')

Пример конфигурирования с помощью словаря

В версии Python 2.7 вы можете использовать словарь с деталями конфигурации. В PEP 391 (https://www.python.org/dev/peps/pep-0391) содержится список обязательных и необязательных элементов словаря конфигурации. Рассмотрим минимальную реализацию:

>import logging

>from logging.config dictConfig

>logging_config = dict(

>····version = 1,

>····formatters = {

>········'f': {'format':

>············'%(asctime)s %(name)-12s %(levelname)-8s %(message)s' }

>········},

>····handlers = {

>········'h': {'class': 'logging.StreamHandler',

>············'formatter': 'f',

>············'level': logging.DEBUG}

>····loggers = {

>········'root': {'handlers': ['h'],

>············'level': logging.DEBUG}

>········}

>)

>dictConfig(logging_config)

>logger = debugging.getLogger()

>logger.debug('often makes a very good meal of %s', 'visiting tourists')

Пример конфигурирования непосредственно в коде

Наконец, рассмотрим минимальную конфигурацию журналирования, расположенную непосредственно в коде:

>import logging


>logger = logging.getLogger()

>handler = logging.StreamHandler()

>formatter = logging.Formatter(

>········'%(asctime)s %(name)-12s %(levelname)-8s %(message)s')

>handler.setFormatter(formatter)

>logger.addHandler(handler)

>logger.setLevel(logging.DEBUG)


>logger.debug('often makes a very good meal of %s', 'visiting tourists')

Выбираем лицензию

В Соединенных Штатах Америки, если для вашего исходного кода не указана лицензия, пользователи не получат законного права загружать, модифицировать или распространять его. Помимо этого, они не смогут вносить свой вклад в проект, если вы не укажете, по каким правилам играть. Поэтому вам