Простое логирование работы программы
Логирование программы необходимо для отслеживания ошибок, некорректных данных и других особенностей, которые могут возникнуть в ходе ее работы. Самым простым способом вывода логов является использование встроенного модуля logging и его функций debug, info, warning, error, задающих разные уровни сообщений:
import logging logging.debug('Отладочное сообщение') logging.info('Информационное сообщение') logging.warning('Предупреждающее сообщение') logging.error('Cообщение об ошибке')
По умолчанию отображаются все сообщения уровня warning и выше, однако минимальный уровень можно поменять. Для этого используется функция basicConfig из модуля logging:
logging.basicConfig(level='DEBUG', force=True) logging.debug('Отладочное сообщение') logging.info('Информационное сообщение') logging.warning('Предупреждающее сообщение') logging.error('Cообщение об ошибке')
Если level='INFO', вывод изменится:
logging.basicConfig(level='INFO', force=True) logging.debug('Отладочное сообщение') logging.info('Информационное сообщение') logging.warning('Предупреждающее сообщение') logging.error('Cообщение об ошибке')
Как можно заметить, уровень INFO выше уровня DEBUG, поэтому в последней ячейке первое сообщение не отображается. В basicConfig можно также указать, чтобы логирование осуществлялось в отдельный файл:
logging.basicConfig(level='INFO', force=True, filename='journal.log') logging.debug('Отладочное сообщение') logging.info('Информационное сообщение') logging.warning('Предупреждающее сообщение') logging.error('Cообщение об ошибке')
Все в той же basicConfig задается формат выводимого сообщения. В его структурные элементы входят:
- asctime - дата и время;
- levelname - уровень сообщения;
- lineno - номер строки;
- message - текст сообщения.
Они задаются в форме %(элемент)s:
logging.basicConfig(level='DEBUG', force=True, format='%(asctime)s %(levelname)s %(lineno)s %(message)s') logging.debug('Отладочное сообщение') logging.info('Информационное сообщение') logging.warning('Предупреждающее сообщение') logging.error('Cообщение об ошибке')