Почему документы Python рекомендуют не использовать ведение журнала для обычного вывода на консоль? - PullRequest
0 голосов
/ 22 октября 2019

В Python документы по ведению журнала он говорит " лучший инструмент для задачи " из "Отображение вывода консоли [ing] для обычного использования сценария командной строкиили программа"должна использовать функцию print().

Я не понимаю, почему. Какова причина этого?

Я хочу систематически использовать ведение журнала в моем проекте, который представляет собой инструмент командной строки с некоторым стандартным выводом на консоль. Все стандартные выходные данные, обычно генерируемые print(), также должны идти в файл журнала.

Для моего корневого регистратора я использую StreamHandler для вывода на консоль и FileHandler для генерации файла журнала. Если я хочу следовать рекомендации, я должен либо дублировать каждое оператор печати с идентичным оператором регистрации, либо найти способ перенаправить вывод с print(), как предложено в этого вопроса . Принятым ответом было заменить функцию печати записью print = log.info, что в конечном итоге фактически сводится к использованию регистрации для обычного вывода на консоль.

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

Ведение журнала является более ресурсоемким и трудоемким, чем простая печать. Если все, что вы хотите сделать, это получить вывод консоли, используйте print. Тем не менее, вы также хотите записать в файл все свои выходные данные, поэтому logging - то, что вы хотите использовать.

Если вы хотите выполнить как печать на консоль, так и сохранить в журнал, вы можетевставляйте обе команды в каждый раз, когда вы захотите это сделать, создайте пользовательскую функцию, которая будет выполнять обе вещи по отдельности, или создайте StreamHandler и FileHandler, как вы намекали для отправки ваших журналов на стандартный вывод. Вы можете следовать этому ответу для примера.

1 голос
/ 22 октября 2019

Если вы хотите что-то зарегистрировать, вы хотите что-то зарегистрировать. Если вы хотите вывести данные на стандартный вывод, вы хотите что-то напечатать. Иногда один маскируется под другой, но они принципиально отличаются.

Если вы создаете приложение командной строки, которое читает из stdin и выводит в stdout, вы печатаете. Если вы пишете информацию, предупреждения или сообщения об ошибках о каком-либо происходящем процессе, вы регистрируетесь.

Я хочу использовать системное ведение журнала в моем проекте

Затем регистрируйтесь систематическивместо систематической печати. ​​

Все стандартные выходные данные, обычно генерируемые print (), также должны идти в файл журнала.

Тогда это не должны быть вызовы печати,но вместо этого ведите журнал звонков.

По моему мнению, вопрос, который вы указали, содержит плохой совет. Вы должны использовать регулярные журналы вызовов и настроить свой регистратор таким образом, чтобы он выводил как на консоль, так и в файл журнала.

...