One HTTP request. Nothing to install.
loghq ingests structured logs over plain JSON. If your language can make an HTTP request, it can ship logs — no SDK, no build step, no lock-in. Start here, then dive into the topic you need.
Quickstart
Three steps take you from an empty project to a live stream in your dashboard.
Copy your ingest key
Every project has one, in project settings. It is public by design — safe to ship in a client bundle — revocable, rotatable, and grants no read access.
POST your first entry
Send JSON to /logs with the key in the X-LogHQ-Key header. One entry or a batch of up to 500.
Search, filter, correlate
Entries land verbatim. Filter by level, channel, or environment, or pull every line sharing a trace id to see what happened around one event.
# any language, any runtime — this is the whole integration
curl -X POST https://loghq.org/logs \
-H 'Content-Type: application/json' \
-H 'X-LogHQ-Key: loghq_your_project_key' \
-d '{
"logs": [{
"message": "payment gateway timeout",
"level": "error",
"channel": "billing",
"environment": "production",
"release": "checkout@2.14.0",
"trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
"context": { "provider": "stripe", "attempt": 3 }
}]
}'
# => 201 { "ok": true, "stored": 1, "dropped": 0, "skipped": 0 }
Read up by topic
Capturing logs
What an entry looks like on the wire, and how to batch without blocking your hot path.
Read moreThe ingest spec
Every field, every limit, and the retry rules for each status code. Enough to write a client from scratch.
Read moreTraces and requests
Correlation ids are join keys, not grouping keys. Pull every line emitted under one trace, in order.
Read moreReleases and environments
Tag every entry with a release and environment so a regression names its own deploy.
Read moreAlerts and channels
Route the levels that matter to email, Slack, or Discord, and stay quiet for the rest.
Read moreSelf-hosting
Run loghq on your own Postgres so sensitive log data never leaves your infrastructure.
Read more