Логирование в Python через REST API
Logger принимает лог одним HTTP-запросом и мгновенно отдаёт его подключённому клиенту через WebSocket. Серверная история не хранится — вы видите событие в момент, когда оно произошло.
Быстрый старт с requests
Отправьте первое событие из Python за пару минут. Consumer Key выдаётся после регистрации в веб-интерфейсе.
import requests
URL = "https://logger.dp-projects.ru/sendmess"
def log(module: str, mess, key: str = "ваш-consumer-key"):
requests.post(URL, json={
"key": key,
"module": module,
"mess": mess,
"mode": "regular",
}, timeout=5)
log("payment-service", {
"event": "payment_processed",
"amount": 1000,
"status": "success",
})
Интеграция с модулем logging
Если в проекте уже используется стандартный logging, достаточно добавить свой Handler — он будет отправлять каждую запись в Logger, не меняя существующий код вызовов logger.info(...).
import logging
import requests
URL = "https://logger.dp-projects.ru/sendmess"
class LoggerAPIHandler(logging.Handler):
def __init__(self, key: str, module: str = "python-app"):
super().__init__()
self.key = key
self.module = module
def emit(self, record: logging.LogRecord):
try:
requests.post(URL, json={
"key": self.key,
"module": self.module,
"mess": self.format(record),
}, timeout=3)
except Exception:
self.handleError(record)
logger = logging.getLogger("app")
logger.setLevel(logging.INFO)
logger.addHandler(LoggerAPIHandler("ваш-consumer-key"))
logger.info("Сервис запущен")
Особенности логирования из Python
- 01
Только исходящий HTTP
Не нужен агент, sidecar или установка пакетов в продакшн — достаточно requests или встроенного http.client.
- 02
Логи не хранятся на сервере
Logger занимается доставкой, а не архивом. Подключите клиент до отправки сообщений, иначе событие будет некому показать.
- 03
Асинхронно при желании
Тот же запрос отлично ложится на httpx.AsyncClient, если приложение уже async.
Частые вопросы
Нужно ли устанавливать отдельную библиотеку для логирования в Python?
Нет. Logger — это обычный HTTP-эндпоинт, поэтому достаточно requests, httpx или стандартного urllib. Библиотеку можно написать самому за пару десятков строк — пример есть на этой странице.
Как отправить в Logger объект, а не строку?
Параметр mess принимает строку, число, объект или массив. Передайте dict, и клиент Logger покажет его как структурированный JSON с подсветкой.
Сохраняются ли логи на сервере Logger?
Нет, сервер не ведёт архив переданных логов — он доставляет их подключённому клиенту через WebSocket в реальном времени.
Отправка логов из других языков
Поймайте следующее событие.
Откройте клиент, получите Consumer Key и отправьте первый лог из Python.