Skip to main content

Library for logging runtime errors and sending execution reports via Telegram and Email

Project description

runreporter

Библиотека для логирования ошибок и отправки отчетов по завершению выполнения.

Возможности:

  • Логирование в файл (папка для .log создается автоматически)
  • Сбор последних 300 строк лога в отчет
  • Отправка отчетов в Telegram (по chat_id)
  • Отправка отчетов на Email (SMTP)
  • Флаги: отправлять ли отчеты при отсутствии ошибок; приоритетный канал (Telegram/Email)

Установка

pip install .

Примеры использования

Вариант 1: через контекстный менеджер (with)

from runreporter import ErrorManager, SmtpConfig

manager = ErrorManager(
    log_file_path="logs/app.log",  # папка logs будет создана автоматически
    telegram_bot_token="123:ABC",
    telegram_chat_ids=[11111111, 22222222],
    smtp_config=SmtpConfig(
        host="smtp.example.com",
        port=465,
        username="user@example.com",
        password="pass",
        use_ssl=True,
        from_addr="user@example.com",
    ),
    email_recipients=["dev1@example.com", "dev2@example.com"],
    send_reports_without_errors=False,
    primary_channel="telegram",
)

with manager.context(run_name="Ежедневный импорт") as log:
    log.info("Начало работы")
    log.error("Ошибка обработки записи id=42")

Вариант 2: без with (явный старт и финиш)

from runreporter import ErrorManager, SmtpConfig

manager = ErrorManager(
    log_file_path="logs/app.log",
    telegram_bot_token="123:ABC",
    telegram_chat_ids=[11111111],
    smtp_config=SmtpConfig(
        host="smtp.example.com",
        port=465,
        username="user@example.com",
        password="pass",
        use_ssl=True,
    ),
    email_recipients=["dev@example.com"],
    send_reports_without_errors=False,
    primary_channel="email",
)

log = manager.get_logger(run_name="Ночной job")

try:
    log.info("Старт job")
    raise RuntimeError("Пример ошибки")
except Exception:
    log.exception("Произошло исключение")
finally:
    manager.send_report()

Вариант 3: локальный контекст сообщений

log = manager.get_logger(run_name="ETL")

log.info("Подготовка")
with manager.error_context("Загрузка CSV"):
    log.info("Читаю файл")
    log.error("Ошибка парсинга")  # [ETL > Загрузка CSV] ...
log.info("Финиш")

Вариант 4: общий логгер из разных модулей (без передачи экземпляра)

# main.py
from runreporter import ErrorManager
manager = ErrorManager(log_file_path="logs/app.log")

# service_a.py
from runreporter import get_logger_for
log = get_logger_for("ServiceA")
log.info("Запуск")  # [ServiceA] ...

# service_b.py
from runreporter import get_logger_for
log = get_logger_for("ServiceB")
log.error("Ошибка")  # [ServiceB] ...

Вариант 5: общий логгер через внедрение зависимостей (DI)

# main.py
from runreporter import ErrorManager
manager = ErrorManager(log_file_path="logs/app.log")

from runreporter import get_logger_for
from mymodule import Worker

worker = Worker(get_logger_for("Worker"))
worker.run()

# mymodule.py
from runreporter import ComponentLogger

class Worker:
    def __init__(self, log: ComponentLogger) -> None:
        self.log = log

    def run(self) -> None:
        self.log.info("Старт")

Конфигурация

  • send_reports_without_errors: если False, отчеты будут отправляться только при наличии ошибок
  • primary_channel: "telegram" или "email" — приоритет канала; второй используется как резервный

Лицензия

MIT

Project details


Download files

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

Source Distribution

runreporter-0.2.2.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

runreporter-0.2.2-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file runreporter-0.2.2.tar.gz.

File metadata

  • Download URL: runreporter-0.2.2.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for runreporter-0.2.2.tar.gz
Algorithm Hash digest
SHA256 32ccc6e0dbaf95ad933e72cbebe4c15d1e77d29c22b1e3b0364dd93fda50e793
MD5 99d1c5307092a84fb649c62a315ee227
BLAKE2b-256 bb74b4caec75961bc8aa65135c78e3ad944b204d9d8fb2c93de7265a62e89123

See more details on using hashes here.

File details

Details for the file runreporter-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: runreporter-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for runreporter-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 accfbe0c05850a65326beb0b8e18a0c59748f39d25c916367d9b775e7797a0ee
MD5 d7236286739bbe67f1caa772c561de4e
BLAKE2b-256 e86a00407976d93424e2332a634e152715eb1d271943dd9acc51d8d804ac196e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page