Вход В Telegram, Или История О Том, Как Я Делал Библиотеку Python

Модуль Ведение журнала на Python — мощный инструмент разработки.

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

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

Вход в Telegram, или история о том, как я делал библиотеку Python



вступление

Давным-давно, а точнее несколько месяцев назад, в канун Нового года, я сидел дома и решал задачу машинного обучения.

Это было связано с нейронными сетями и классификацией текста, поэтому я, естественно, использовал бесплатный графический процессор от Google ( коллаб ).

На улице шел снег, и модели очень долго тренировались.

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



Вход в Telegram, или история о том, как я делал библиотеку Python

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

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



Вход в Telegram, или история о том, как я делал библиотеку Python

Я скопировал этот код с ноутбука (ноутбука Jupyter) на ноутбук, а потом понял, что это можно встроить в модуль Ведение журнала и обернуть в библиотеку, чтобы не пришлось каждый раз таскать большие куски кода, а использовать всего пару строк.



Журналирование.

обработчики

Было понятно, что за основу нужно взять встроенный в Python модуль логирования.

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

Необходимо было найти способ перехватывать логи и отправлять их в телеграммы.

К счастью, в Ведение журнала есть такой класс СтримХэндлер.

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



Tg-логгер

И вот, держа в голове все описанные выше идеи, я задался целью написать свою библиотеку.

Это то, что произошло.

Для тех, кому лень запускать код, но хочется понять, как он будет работать, я сделал бота @tg_logger_demo_bot .



Вход в Telegram, или история о том, как я делал библиотеку Python

Для использования библиотеки вам необходимо:

  • создать телеграм-бота (как это сделать описано Здесь )
  • получить ваш ID пользователя (это можно сделать через @tg_logger_demo_bot используя команду
      
      
      
       

    /id

    )
Давайте установим библиотеку через пункт .



pip install tg-logger

Давайте посмотрим на пример кода

import logging import tg_logger # Telegram data token = "1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" users = [1111111111] # Base logger logger = logging.getLogger('foo') logger.setLevel(logging.INFO) # Logging bridge setup tg_logger.setup(logger, token=token, users=users) # Test logger.info("Hello from tg_logger by otter18")

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



# Logging bridge setup tg_logger.setup(logger, token=token, users=users)

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

С их помощью можно, в частности, настроить формат отправки логов.



Вход в Telegram, или история о том, как я делал библиотеку Python



Тгфилелоггер

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



import tg_logger # Telegram data token = "1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" users = [1111111111] # TgFileLogger example tg_files_logger = tg_logger.TgFileLogger( token=token, # tg bot token users=users, # list of user_id timeout=10 # 10 seconds by default ) file_name = "test.txt" with open(file_name, 'w') as example_file: example_file.write("Hello from tg_logger by otter18") tg_files_logger.send(file_name, "Test file")



Вход в Telegram, или история о том, как я делал библиотеку Python



Аутро

Теги: #python #Telegram #python3 #library #logging #logger #handler
Вместе с данным постом часто просматривают: