python
August 18, 2022

Простое логирование работы программы

Логирование программы необходимо для отслеживания ошибок, некорректных данных и других особенностей, которые могут возникнуть в ходе ее работы. Самым простым способом вывода логов является использование встроенного модуля 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ообщение об ошибке')