Продолжаю делиться своим небольшим опытом с такими же, как и я начинающими разработчиками Telegram-ботов на Python.
Мало подключить библиотеку logging в ваш проект, так как не все ошибки это ошибки. Сам охерел от формулировки, поэтому поясню: не все ошибки, с которыми может столкнуться ваш бот являются событиями уровня WARNING, ваш бот попросту может отработать то или иное событие некорректно, но так как по факту оно отработано, это не будет записано в лог.
Для начала создадим отдельный модуль log.py (не называйте модуль logging, так как называть модуль аналогично библиотеке приводит к не очевидной ошибке).
Для начала рекомендую выставлять уровень логирования DEBUG, так как будут записываться все действия бота, вот такая иерархия:
- Debug — самый низкий уровень логирования, предназначенный для отладки.
- Info — этот уровень предназначен для вывода данных о фрагментах кода, работающих так, как ожидается.
- Warning — этот уровень логирования предусматривает вывод предупреждений, он применяется для записи сведений о событиях, на которые программист обычно обращает внимание. Такие события вполне могут привести к проблемам при работе приложения. Если явно не задать уровень логирования — по умолчанию используется именно warning.
- Error — этот уровень логирования предусматривает вывод сведений об ошибках — о том, что часть приложения работает не так как ожидается, о том, что программа не смогла правильно выполниться.
- Critical — этот уровень используется для вывода сведений об очень серьёзных ошибках, наличие которых угрожает нормальному функционированию всего приложения. Если не исправить такую ошибку — это может привести к тому, что приложение прекратит работу.
Я использую стандартный уровень WARNING. Так же я указал папку куда сохранять логи и настроил создание нового файла каждый день для удобства чтения.
Теперь я могу добавить запись нужных мне событий в лог с помощью конструкции try-except:
Используйте данную конструкцию как можно чаще, так как это не только возможность записать нужные события, но и возможность сделать вашего бота умнее. Если ошибки не ставят бота в тупик, то они не ставят в тупик юзера, а это очень важно для удержания аудитории.
Но мало записывать события работы бота, для отладки очень полезно знать какие действия юзера привели к проблеме, поэтому давайте создадим функцию, с помощью которой мы сможем записывать все действия юзера и бота в диалоге.
Для удобства пусть название файла будет user_id пользователя с которым идёт чат, а сами файлы сохраняются в отдельную папку. В итоге имеем файл «user_116918991_chat_log.txt»
Теперь нам нужно вызвать эту функцию в той части кода, где нам необходимо записать какое-либо сообщение:
- await log_message(«System», user_id, «Отправлена команда /start») — тут я записываю системное сообщение, а именно какое именно действие спровоцировало бота отправить сообщение.
- await log_message(«Bot», user_id, text) — тут я уже записываю непосредственно сообщение отправленное ботом.
Таким образом необходимо вызвать функцию log_message везде где нам необходимо записать какое-либо действие бота или юзера.
Напомню, моего бота зовут TwitchNotifier, он уведомляет о начале стримов на Twitch. Недавно я реализовал возможность отправки уведомлений в telegram-каналы, о чём планирую рассказать в одном из следующих гайдов. Также он отправляет умные уведомления, которые в реальном времени отображают длительность стрима, название, категорию.