В python зачем использовать логи вместо печати? - PullRequest
59 голосов
/ 03 августа 2011

Для простой отладки в сложном проекте есть ли причина использовать регистратор python вместо print?А как насчет других вариантов использования?Существует ли приемлемый наилучший вариант использования для каждого (особенно когда вы ищете только стандартный вывод)?

Я всегда слышал, что это "лучшая практика", но я не смог понятьпочему.

Ответы [ 5 ]

67 голосов
/ 03 августа 2011

Пакет журналирования имеет множество полезных функций:

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

Печать не имеет ничего из этого

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

19 голосов
/ 03 августа 2011

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

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

8 голосов
/ 03 августа 2011

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

Онлайн-отладчик позволяет вам проверять состояние работающей программы; Но хорошая вещь в настоящем отладчике заключается в том, что вам не нужно изменять исходный код; ни до, ни после сеанса отладки; Вы просто загружаете программу в отладчик, сообщаете отладчику, где вы хотите посмотреть, и все готово.

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

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

Когда вы обнаружите, что думаете, что оператор print может быть проще, чем использование pdb (как это часто бывает), вы обнаружите, что использование logger значительно упрощает работу вашей программы над состоянием, чем если бы вы использовали и позже удалить выписки из печати. ​​

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

4 голосов
/ 03 августа 2011

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

0 голосов
/ 26 сентября 2018

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

Это чистое золото, я могу запустить egrep над файлом журнала после запускается скрипт python. Я могу настроить поиск по шаблону egrep, чтобы выбрать именно то, что мне интересно, и игнорировать все остальное. Это снижение когнитивной нагрузки и свободы выбора моего шаблона egrep позже методом проб и ошибок является ключевым преимуществом для меня.

tail -f mylogfile.log | egrep "key_word1|key_word2"

Теперь добавьте другие интересные вещи, которые печать не может сделать (отправка в сокет, установка уровней отладки, logrotate, добавление метаданных и т. Д.), У вас есть все основания предпочесть ведение журнала над операторами простой печати. ​​

Я склонен использовать операторы печати, потому что это лениво и просто, добавление регистрации требует некоторого кода, а у нас есть yasnippets (emacs) и ultisnips (vim) и другие инструменты шаблонов, так зачем отказываться от регистрации для простых операторов печати!

...