Stream Python logs to your browser in real time

BunnyLogs adds a standard logging.Handler to your Python app. Every log record — from any logger, at any level — streams to your browser over WebSocket the instant it's emitted. No polling, no SSH, no file tailing.

The problem

Python apps running in containers, on remote servers, or as background workers are invisible. print() statements vanish into stdout. Log files need SSH to read. Structured loggers add configuration overhead and still dump to files you can't watch live from your laptop.

When a production bug appears mid-deploy, you're stuck: either SSH'd into a server tailing a file, or staring at a logging aggregator with a 30-second delay and a query language to learn.

How it works

Install the PyPI package, add one handler, and your logs stream live to bunnylogs.com/live/<your-uuid>. Open that URL in any browser — your laptop, phone, or a team dashboard screen — and watch log records appear the moment your app emits them.

The handler runs in a background daemon thread so emit() returns in microseconds and never blocks your application. It plugs into the standard logging module you already use — no new API to learn.

Works with every Python framework

  • Django — add to the LOGGING dict in settings.py
  • FastAPI / Uvicorn — attach to the uvicorn or app logger
  • Celery — watch task execution and retries in real time
  • Scripts & cron jobs — see output without SSH access
  • structlog / loguru — use as a sink or handler destination
app.py
# pip install bunnylogs

import logging
from bunnylogs import BunnyLogsHandler

logger = logging.getLogger("my-app")
logger.setLevel(logging.DEBUG)
logger.addHandler(BunnyLogsHandler("YOUR-UUID"))

logger.info("server started on :8000")
logger.warning("disk usage above 80%")
logger.error("payment failed", exc_info=True)
Django settings.py
LOGGING = {
    "version": 1,
    "handlers": {
        "bunnylogs": {
            "class": "bunnylogs.BunnyLogsHandler",
            "uuid": "YOUR-UUID",
            "level": "WARNING",
        },
    },
    "root": {
        "handlers": ["bunnylogs"],
        "level": "WARNING",
    },
}

What you get

Real-time streaming

Log records appear in your browser the instant your app emits them — no polling, sub-second latency.

30-day search

Full-text search across a month of history. Filter by log level, logger name, or keyword.

Alerts

Fire a webhook or Slack message the moment an ERROR or specific keyword appears in the stream.

Team sharing

Share the stream URL with teammates. The UUID is the access token — no login required to watch.

Add live logging to your Python app in minutes

Free up to 100 KB/month. No credit card required.

Get started free Read the docs →