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 runreporter

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

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

from runreporter import ErrorManager, SmtpConfig

manager = ErrorManager(
    log_file_path="logs/app.log",  # папка logs будет создана автоматически
    logger_name="myapp",  # имя в логах (по умолчанию "app")
    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",
    logger_name="myapp",  # имя в логах
    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", logger_name="myapp")

# 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", logger_name="myapp")

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.3.tar.gz (9.7 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.3-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for runreporter-0.3.tar.gz
Algorithm Hash digest
SHA256 def70d5409c5c8f6ff36b9611f00f02cf1df66b0a85a278341f41bc0c7a95843
MD5 a13f8db67f1e44d555d498383975f888
BLAKE2b-256 02cc964481c8c1d85b9013d14ebe143f332d002145a628ef554162e8cf979353

See more details on using hashes here.

File details

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

File metadata

  • Download URL: runreporter-0.3-py3-none-any.whl
  • Upload date:
  • Size: 11.1 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 191b6e474720907d27a7bbe8ef36a55b54a40371ca53b6bd2413547fc1b45481
MD5 cc3aa2d5d398b156034a01731bf0631f
BLAKE2b-256 4efd144a942f3cb32ae3d7e02d68cb7a604d404c31b926ae5f5e0bb482360d5e

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