Подтвердить что ты не робот

Сообщение об ошибке "Нет обработчиков для регистратора ZODB.FileStorage" на скопированной базе данных ZODB

Я создал базу данных с помощью ZODB, затем скопировал ее на другой компьютер. Интересно, почему каждый раз, когда я вхожу в эту базу данных (скопированный), я получаю эту ошибку:

no handlers could be found for logger (ZODB.FileStorage)

Примечание: программа не сломается, она просто распечатывает инструкцию красным цветом, как если бы она была ошибкой.

Что это за раздражающее сообщение и почему это происходит при каждом входе в систему?

Update no (1): Что такое система регистрации python? Почему мне нужно настроить его в своем приложении?

Примечание:

  • Я использую только ZODB.

  • Моя ОС - Windows XP sp2.

4b9b3361

Ответ 1

Короткий ответ

Вам не нужно настраивать его для своего приложения. Полезно это сделать.

Длинный ответ

Модуль logging - это модуль python, который позволяет любому коду python записывать информацию таким образом, чтобы она была неактуальной для используемого приложения. Библиотеки на любой глубине могут импортировать модуль протоколирования, информацию о журнале, предупреждения, ошибки и т.д. И не знать, как именно пользователь получит их.

То, что вы видите, касается отсутствия обработчика в вашем собственном приложении. ZODB, очевидно, регистрирует информацию, но поскольку вы не определили обработчик, эта информация о регистрации просто испаряется в эфир. Он уведомляет вас о том, что если вы хотите просмотреть некоторую информацию о регистрации, вы должны определить обработчик

Из журнальной книги:

import logging

# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.ERROR)
# create formatter and add it to the handlers
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fh.setFormatter(formatter)
ch.setFormatter(formatter)
# add the handlers to the logger
logger.addHandler(fh)
logger.addHandler(ch)

В этом примере создается регистратор с именем для вашего приложения. Затем он создает два типа обработчиков. Один из них - обработчик файлов для записи журналов уровня DEBUG в файл. Второй - обработчик потока, который отправит ошибки на консоль.

Если вы хотите увидеть более подробную информацию на консоли, вы можете изменить уровень журнала на INFO:

ch = logging.StreamHandler()
ch.setLevel(logging.INFO)

Также обратите внимание на концепцию "formatters". Вы можете установить разные форматы журналов для разных обработчиков.

Если вы хотя бы создаете обработчик потока в своем приложении, он больше не будет предупреждать вас о том, что обработчик не определен.

Для python 2.7+ модуль logging включает NullHandler. Он предназначен для использования в библиотеке (например, в вашей библиотеке базы данных) как обработчик по умолчанию, который замалчивает ошибки, когда конечный пользователь использует библиотеку без каких-либо обработчиков ведения журнала (как вы это делали). Поэтому, если вы вообще не заботитесь о регистрации и просто хотите ее отключить, вы можете добавить NullHandler в свой собственный код. Рекомендуется фактически настроить ведение журнала, но это всего лишь другие варианты:

Добавление NullHandler к журналу

import logging
logging.getLogger('spam_application').addHandler(logging.NullHandler())