что такое logging в aiogram

Шпаргалка по логированию на Python

Авторизуйтесь

Шпаргалка по логированию на Python

Если Вы хотя бы немного знакомы с программированием и пробовали запускать что-то «в продакшен», то вам наверняка станет больно от такого диалога:

— Вась, у нас там приложение слегло. Посмотри, что случилось?

— Эмм… А как я это сделаю.

Да, у Василия, судя по всему, не настроено логирование. И это ужасно, хотя бы по нескольким причинам:

Впрочем, последний пункт, наверно, лишний. Однако, одну вещь мы поняли наверняка:

Логирование — крайне важная штука в программировании.

Что такое logging?

Модуль logging в Python — это набор функций и классов, которые позволяют регистрировать события, происходящие во время работы кода. Этот модуль входит в стандартную библиотеку, поэтому для его использования достаточно написать лишь одну строку:

У функции basicConfig() 3 основных параметра:

Давайте рассмотрим каждый из параметров более подробно.

Уровни логирования на Python

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

Соответственно, чтобы не засорять логи лишней информацией, в basicConfig() Вы можете указать минимальный уровень фиксируемых событий.

По умолчанию фиксируются только предупреждения ( WARNINGS ) и события с более высоким приоритетом: ошибки ( ERRORS ) и критические ошибки ( CRITICALS ).

что такое logging в aiogram. image. что такое logging в aiogram фото. что такое logging в aiogram-image. картинка что такое logging в aiogram. картинка image.

Если Вы хотите посмотреть все сообщения, необходимо передать соответствующий уровень ошибок:

А далее, чтобы записать информационное сообщение (или вывести его в консоль, об этом поговорим чуть позже), достаточно написать такой код:

И так далее. Теперь давайте обсудим, куда наши сообщения попадают.

Отображение лога и запись в файл

Другими словами, если Вы просто выполните такой код:

То сообщение WOW придёт Вам в консоль. Понятно, что в консоли никому эти сообщения не нужны. Как же тогда направить запись лога в файл? Очень просто:

Ок, с записью в файл и выбором уровня логирования все более-менее понятно. А как настроить свой шаблон? Разберёмся.

Кстати, мы собрали для Вас сублимированную шпаргалку по логированию на Python в виде карточек. У нас ещё много полезностей, не пожалеете 🙂

Форматирование лога

Итак, последнее, с чем нам нужно разобраться — форматирование лога. Эта опция позволяет Вам дополнять лог полезной информацией — датой, названием файла с ошибкой, номером строки, названием метода и так далее.

Например, если внутри basicConfig указать:

То вывод ошибки будет выглядеть так:

Вы можете сами выбирать, какую информацию включить в лог, а какую оставить. По умолчанию формат такой:

Важно помнить, что все параметры logging.basicConfig должны передаваться до первого вызова функций логирования.

Эпилог

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

Если хотите разобраться с параметрами более подробно, Вам поможет официальная документация (очень неплохая, кстати).

Источник

Урок 3. Машина состояний и то самое логгирование

Урок проводится с использованием aiogram версии 1.2

Сегодня мы научимся использовать:

Традиционно код урока доступен на GitHub

Создаем состояния

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

Итак, запишем в файл utils.py наш демонстрационный класс с состояниями:

Ещё не забываем добавить в config.py токен своего бота и мы готовы писать логику!

Указываем хранилище состояний и включаем логгирование

К привычным с прошлых уроков импортам у нас добавляется ещё парочка, а именно:

И тут же применяем их:

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

Обрабатываем входящие сообщения

Итак, по традиции добавляем обработчики команд start и help :

А так же «ловим» все сообщения, отправленные при «нулевом» состоянии:

что такое logging в aiogram. starthelpecho. что такое logging в aiogram фото. что такое logging в aiogram-starthelpecho. картинка что такое logging в aiogram. картинка starthelpecho.

Переходим к главной теме нашего урока: состояниям

Эти самые состояния нужно как-то устанавливать, поэтому сделаем так:

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

Теперь отрабатываем входящие сообщения при выбранном состоянии

Теперь добавим такой хэндлер:

что такое logging в aiogram. echofirstsecond. что такое logging в aiogram фото. что такое logging в aiogram-echofirstsecond. картинка что такое logging в aiogram. картинка echofirstsecond.

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

что такое logging в aiogram. thirdfourth. что такое logging в aiogram фото. что такое logging в aiogram-thirdfourth. картинка что такое logging в aiogram. картинка thirdfourth.

Ну и последний на сегодня хэндлер:

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

что такое logging в aiogram. allotherstates. что такое logging в aiogram фото. что такое logging в aiogram-allotherstates. картинка что такое logging в aiogram. картинка allotherstates.

Для красоты ещё стоит закрывать соединение с хранилищем состояний, для этого объявляем функцию:

Источник

Урок 2. Медиа, разметка, эмоджи и щепотка логирования

В этом уроке мы научим нашего бота:

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

Зачем хранить айди файлов, которые мы отправляем?

Ещё вам необходимо знать, что каждый бот видит разные айди у всех медиа файлов. По айди, который получил один бот, другой бот не сможет отправить ничего, а при попытке сделать это получит ошибку.

Наконец-то код!

Для начала создаем модель таблицы для нашей базы данных. Файл db_map.py:

Теперь загружаем в Телеграм файлы и сохраняем возвращаемые айди в базу данных. Для этого я написал небольшой скрипт, который доступен по ссылке. Если будете исполнять его на своём компьютере, можете обратить внимание на то самое логирование библиотеки aiogram.

Вот результат выполнения скрипта:

что такое logging в aiogram. uploaded files. что такое logging в aiogram фото. что такое logging в aiogram-uploaded files. картинка что такое logging в aiogram. картинка uploaded files.

Создаем хэндлер команд /start и /help :

Затем добавляем обработчики всех остальных команд

О каждой по отдельности (за одно разберем эмоджи):

Отправка аудио + ответ на определенное сообщение:

что такое logging в aiogram. send voice RANGGYU. что такое logging в aiogram фото. что такое logging в aiogram-send voice RANGGYU. картинка что такое logging в aiogram. картинка send voice RANGGYU.

Отправка фото с комментарием + эмоджи:

что такое logging в aiogram. send one photo. что такое logging в aiogram фото. что такое logging в aiogram-send one photo. картинка что такое logging в aiogram. картинка send one photo.

Отправка медиагруппы (где смешались кони, люди фото и видео):

Внимание! На момент публикации заметки при использовании релизной версии библиотеки невозможно отправить медиагруппу представленным выше способом из-за ошибки в коде. Недочёт исправлен в этом коммите. Версия 1.1, которая устанавливается через pip, уже несет в себе это исправление.

что такое logging в aiogram. send media group. что такое logging в aiogram фото. что такое logging в aiogram-send media group. картинка что такое logging в aiogram. картинка send media group.

Отправка видеозаметки (видео в кружочке):

что такое logging в aiogram. send video note. что такое logging в aiogram фото. что такое logging в aiogram-send video note. картинка что такое logging в aiogram. картинка send video note.

Отправка файла:

что такое logging в aiogram. send document. что такое logging в aiogram фото. что такое logging в aiogram-send document. картинка что такое logging в aiogram. картинка send document.

Преформатированный текст:

Так как разметка тут немного шалит, приложу ещё и скриншот кода с более понятной подсветкой синтаксиса: что такое logging в aiogram. pre formatted. что такое logging в aiogram фото. что такое logging в aiogram-pre formatted. картинка что такое logging в aiogram. картинка pre formatted.Тут мы отправляем преформатированный текст. Обычно такая разметка необходима при отправке блоков кода. По сути, это тот же моноширинный шрифт как и при использовании code (рассмотрим его ниже), однако pre работает для многострочных вставок и автоматически отделяется переносом строки до и после. В качестве примера отправим данную же функцию с её хэндлером. Получаем такой результат: что такое logging в aiogram. preformatted. что такое logging в aiogram фото. что такое logging в aiogram-preformatted. картинка что такое logging в aiogram. картинка preformatted.

Ну и напоследок немного улучшим знания, полученные в предыдущем уроке и закрепим их на деле:

Оставим для нерадивого пользователя пару хэндлеров для нежданных сообщений:

что такое logging в aiogram. ch2last. что такое logging в aiogram фото. что такое logging в aiogram-ch2last. картинка что такое logging в aiogram. картинка ch2last.

Домашнее задание

В качестве домашнего задания предлагаю вам поэкспериментировать и выполнить следующие действия:

Источник

Конечные автоматы (FSM)¶

Теория¶

В этой главе мы поговорим о, пожалуй, самой важной возможности ботов: о системе диалогов. К сожалению, далеко не все действия в боте можно выполнить за одно сообщение или команду. Предположим, есть бот для знакомств, где при регистрации нужно указать имя, возраст и отправить фотографию с лицом. Можно, конечно, попросить пользователя отправить фотографию, а в подписи к ней указать все данные, но это неудобно для обработки и запроса повторного ввода.
Теперь представим пошаговый ввод данных, где в начале бот «включает» режим ожидания определённой информации от конкретного юзера, далее на каждом этапе проверяет вводимые данные, а по команде /cancel прекращает ожидать очередной шаг и возвращается в основной режим. Взгляните на схему ниже:

что такое logging в aiogram. l04 1. что такое logging в aiogram фото. что такое logging в aiogram-l04 1. картинка что такое logging в aiogram. картинка l04 1.

Зелёной стрелкой обозначен процесс перехода по шагам без ошибок, синие стрелки означают сохранение текущего состояния и ожидание повторного ввода (например, если юзер указал, что ему 250 лет, следует запросить возраст заново), а красные показывают выход из всего процесса из-за команды /cancel или любой другой, означающей отмену.

Процесс со схемы выше в теории алгоритмов называется конечным автоматом (или FSM — Finite State Machine). Подробнее об этом можно прочесть здесь.

Практика¶

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

Примечание об исходных текстах к главе

В тексте будет рассмотрен не весь код бота, некоторые импорты и обработчики специально пропущены для улучшения читабельности. Полный набор исходников можно найти на GitLab или в зеркале на GitHub.

За основу структуры файлов и каталогов взят репозиторий tgbot_template от пользователя Tishka17. В этой главе будет рассмотрен сильно упрощённый вариант его примера, а далее по мере усложнения бота структура файлов будет расширяться.
Спасибо!

Структура файлов и каталогов¶

О модулях, пакетах и каталогах

Создание шагов¶

Рассмотрим описание шагов для «заказа» еды. Для начала в файле app/handlers/food.py импортируем необходимые объекты и приведём списки блюд и их размеров (в реальной жизни эта информация может динамически подгружаться из какой-либо БД):

Напишем обработчик первого шага, реагирующий на команду /food (регистрировать его будем позднее):

Осталось реализовать последнюю функцию, которая отвечает за получение размера порции (с аналогичной проверкой ввода) и вывод результатов пользователю:

Шаги для выбора напитков делаются совершенно аналогично. Попробуйте сделать самостоятельно или загляните в исходные тексты к этой главе.

Общие команды¶

Раз уж заговорили о сбросе состояний, давайте в файле app/handlers/common.py реализуем обработчики команды /start и действия «отмены». Первая должна показывать некий приветственный/справочный текст, а вторая просто пишет «действие отменено». Обе функции сбрасывают состояние и данные и убирают обычную клавиатуру, если вдруг она есть:

Зарегистрируем эти два обработчика:

Точка входа¶

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

Источник

aiogram-logging 0.0.1

pip install aiogram-logging Copy PIP instructions

Released: Mar 18, 2021

Simplifies sending logs from your bots to DB.

Navigation

Project links

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: MIT License (MIT)

Requires: Python >=3.6

Maintainers

Classifiers

Project description

aiogram-logger

Simplifies sending logs from your bots to DB.

Quick start with InfluxDB + Grafana

Install package from pip

Prepare InlfuxDB and Grafana with this repo.

Import and create instances

Create StatMiddleware to logging every incoming message

Create dashboard by yourself or import from grafana-dashboard.json

Yeah, you can connect several bots for one InfluxDB

Project details

Project links

Statistics

View statistics for this project via Libraries.io, or by using our public dataset on Google BigQuery

License: MIT License (MIT)

Requires: Python >=3.6

Maintainers

Classifiers

что такое logging в aiogram. blue cube.e6165d35. что такое logging в aiogram фото. что такое logging в aiogram-blue cube.e6165d35. картинка что такое logging в aiogram. картинка blue cube.e6165d35.

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *