Documentation

Learn how to send logs to Bunny Logs.


Injecting Logs via HTTPS

Send an HTTP POST request to your live log stream URL. CSRF protection is disabled on this endpoint so you can POST from any external service.

Endpoint
POST https://bunnylogs.com/live/<uuid>
Form Parameters
Parameter Required Description
message Yes The log message text.
level No Log level (e.g. INFO, WARN, ERROR). Defaults to INFO.
program No Name of the program or service sending the log. Defaults to api.
timestamp No ISO 8601 timestamp. Defaults to the server time at receipt.
Examples

curl

curl -d "message=deployment finished" \
     -d "level=INFO" \
     -d "program=deploy-bot" \
     https://bunnylogs.com/live/<uuid>

Python (requests)

import requests

requests.post(
    "https://bunnylogs.com/live/<uuid>",
    data={
        "message": "deployment finished",
        "level": "INFO",
        "program": "deploy-bot",
    },
)

Node.js (fetch)

await fetch("https://bunnylogs.com/live/<uuid>", {
  method: "POST",
  body: new URLSearchParams({
    message: "deployment finished",
    level: "INFO",
    program: "deploy-bot",
  }),
});

Injecting Logs via Email

Bunny Logs accepts inbound email via LMTP (delivered by Maddy). Any email sent to a <uuid>@bunnylogs.com address is parsed and broadcast to that stream.

Address format
<uuid>@bunnylogs.com

The subject of the email becomes the log message. The From header is used as the program field. The log level defaults to INFO.

Example — sending from the command line
echo "Subject: build passed" | sendmail <uuid>@bunnylogs.com
Example — sending from Python
import smtplib
from email.message import EmailMessage

msg = EmailMessage()
msg["From"] = "ci-pipeline"
msg["To"] = "<uuid>@bunnylogs.com"
msg["Subject"] = "Tests passed on main"

with smtplib.SMTP("bunnylogs.com", 25) as s:
    s.send_message(msg)
Notes

Injecting Logs via Slack

The BunnyLogs Slack bot can be added to any channel and will forward every message to your personal BunnyLogs stream. Each BunnyLogs account has one fixed stream UUID dedicated to Slack — it is auto-generated when you connect and never changes.

How it works
  1. A logged-in BunnyLogs user clicks Connect Slack on the home page.
  2. They are taken through a standard Slack OAuth flow to authorise the app.
  3. After authorisation, BunnyLogs links that Slack workspace to their account and assigns a dedicated stream UUID.
  4. The bot is then added to whichever Slack channels should be forwarded.
  5. Every message posted in those channels is forwarded to the stream in real time.
Message field mapping
BunnyLogs fieldSource
messageMessage text
programSender's Slack display name
levelAlways INFO
timestampSlack message timestamp (UTC)
Running the bot

The bot is a standalone Python process in the slackbot/ directory. It uses Socket Mode so no public URL is required.

1. Create a Slack app at api.slack.com/apps. Enable Socket Mode and create an App-Level Token (connections:write scope) — this is your SLACK_APP_TOKEN.

2. Add OAuth scopes under OAuth & Permissions → Bot Token Scopes:

channels:history  channels:read  groups:history  users:read

3. Subscribe to bot events under Event Subscriptions:

message.channels  message.groups

4. Install the app in your workspace and copy the Bot User OAuth Token (SLACK_BOT_TOKEN).

5. Start the bot:

cd slackbot
pip install -r requirements.txt
cp .env.example .env
# Fill in SLACK_APP_TOKEN, SLACK_BOT_TOKEN, BUNNYLOGS_API_SECRET
python bot.py

6. Add the bot to a channel in Slack:

/invite @YourBotName

Messages in that channel will immediately start appearing in your stream.