Способ | Плюсы | Минусы |
Использование файла в формате INI | Вы можете обновлять конфигурацию при запуске функции logging.config.listen(), которая будет слушать изменения в сокете | У вас будет не такой полный контроль (например, пользовательские фильтры или средства ведения журнала, созданные как подклассы), чем это возможно при конфигурировании средств ведения журнала в коде |
Использование словаря или файла в формате JSON | В дополнение к обновлению во время работы вы также можете загружать конфигурацию из файла с помощью модуля json, который находится в стандартной библиотеке, начиная с Python 2.6 | У вас будет не такой полный контроль, чем это возможно при конфигурировании средств ведения журнала в коде |
Использование кода | Вы имеете полный контроль над конфигурированием | Любые модификации потребуют внесения изменений в исходный код |
Более подробная информация о формате INI содержится в разделе руководства журналирования, посвященном журналированию конфигурации (https://docs.python.org/howto/logging.html#configuring-logging). Минимальный файл конфигурации будет выглядеть так:
[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