Модуль Ведение журнала на Python — мощный инструмент разработки.
Он помогает отслеживать ошибки, следить за производительностью приложений и даже собирать статистику использования вашего сервиса.
В этой статье я расскажу, как можно расширить возможности этого модуля и при чем тут Telegram.
вступление
Давным-давно, а точнее несколько месяцев назад, в канун Нового года, я сидел дома и решал задачу машинного обучения.Это было связано с нейронными сетями и классификацией текста, поэтому я, естественно, использовал бесплатный графический процессор от Google ( коллаб ).
На улице шел снег, и модели очень долго тренировались.
Оставалось всего несколько минут на обучение модели, как вдруг появляется уведомление о том, что соединение с рантаймом потеряно, а это значит, что я не смогу загрузить обученную модель и сабмиты из этого рантайма, и все будет начать заново.
Эта ситуация меня расстроила и заставила задуматься о том, что нужно как-то сохранять файлы через код, ведь процесс выполнения кода не останавливается при возникновении такой ошибки.
Я почему-то сразу подумал о телеграмм-ботах и, написав несколько функций, смог сохранить самбиты и промежуточную информацию о том, как обучается модель и сколько времени ей осталось.
Я скопировал этот код с ноутбука (ноутбука Jupyter) на ноутбук, а потом понял, что это можно встроить в модуль Ведение журнала и обернуть в библиотеку, чтобы не пришлось каждый раз таскать большие куски кода, а использовать всего пару строк.
Журналирование.
обработчики Было понятно, что за основу нужно взять встроенный в Python модуль логирования.
Очевидно, потому что мне не хотелось изобретать велосипед, а также потому, что для использования в приложениях пришлось бы переписывать весь код логирования.
Необходимо было найти способ перехватывать логи и отправлять их в телеграммы.
К счастью, в Ведение журнала есть такой класс СтримХэндлер.
Не буду вдаваться в подробности, но с его помощью можно сделать свою функцию, которая будет запускаться для каждой новой строчки в логах и отправляться в телеграмм.
Tg-логгер
И вот, держа в голове все описанные выше идеи, я задался целью написать свою библиотеку.Это то, что произошло.
Для тех, кому лень запускать код, но хочется понять, как он будет работать, я сделал бота @tg_logger_demo_bot .
Для использования библиотеки вам необходимо:
- создать телеграм-бота (как это сделать описано Здесь )
- получить ваш 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)
Функционировать настраивать() тебе просто нужно передать это дальше лесоруб , к которому вы хотите подключить мост. Если вы посмотрите документация , то вы можете посмотреть другие параметры функции настраивать() .
С их помощью можно, в частности, настроить формат отправки логов.
Тгфилелоггер
Также стоит отметить, что я также добавил функцию отправки файлов.
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")
Аутро
- Весь исходный код находится на Github: github.com/otter18/tg_logger .
- Документация на английском языке доступна по адресу Прочтите документацию .
- Библиотека доступна для скачивания через пункт : pypi.org/project/tg-logger/ .
-
Компьютеры Не Страшны
19 Oct, 24 -
Переговорщик 2020
19 Oct, 24 -
Уроки Sdl 2: Урок 1 — Привет, Sdl 2
19 Oct, 24