#python #logging #stdout #python-3.9
#питон #регистрация #выход из строя #python-3,9
Вопрос:
Я работаю над библиотекой python, которая использует logging
. (Python 3.9) Теперь я импортирую ведение журнала в каждый модуль отдельно (не импортируйте его __init__.py
) и создаю регистратор в каждом модуле с помощью logger = logging.getLogger(__name__)
Что и как я должен настроить, чтобы гарантировать, что, если logging
он не импортирован в код, в котором используется мой пакет, даже записи журнала уровня информации печатаются в stdout/stderr.
Я подумал , что мне придется использовать logging.lastResort.setLevel(logging.INFO)
, и мое предположение, включив следующее в свой __init__.py
import logging logging.lastResort.setLevel(logging.INFO)
Но это — казалось, не дало тех результатов, которых я ожидал. Спасибо за вашу помощь!
Комментарии:
1. Ваша библиотека абсолютно не должна касаться конфигурации ведения журнала. Программа, использующая библиотеку, должна контролировать, с чем она хочет работать
logging
.2. да, я согласен, но
logging.lastResort
, как я понимаю, это designd для случаев, когда программа, использующая мою библиотеку, даже не импортируетсяlogging
. Вот почему я подумал, что должен изменить там последний ресурс, если его вообще можно изменить.3. Почему ваша библиотека должна решить, что ей нужно завалить консоль?
4. Спасибо за быстрые ответы. Это очень хороший момент. 🙂 Но все же моя библиотека обрабатывает вызовы REST API и транзакции БД, и обратная связь об их успехе является ключом, даже если эти сообщения определенно не на
warning
уровне. Они просто информируют пользователя об успешной транзакции. Причина, по которой я использую регистратор, заключается в том, чтобы предоставить пользователю контроль, но по умолчанию использовать журналы на уровне информации на консоли кажется здесь рациональным решением. (Меня больше всего беспокоят записи в журнале библиотек, импортированных моим пакетом.)5. Я думаю, что пользователь должен просто подписаться на получение этих сообщений. Все, что для этого нужно, — это
logging.basicConfig(level=logging.INFO)
с их стороны.