Автостопом по 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')
Выбираем лицензию
В Соединенных Штатах Америки, если для вашего исходного кода не указана лицензия, пользователи не получат законного права загружать, модифицировать или распространять его. Помимо этого, они не смогут вносить свой вклад в проект, если вы не укажете, по каким правилам играть. Поэтому вам