ведение журнала python: последний уровень информации

#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) с их стороны.