Datadog
Ship logs to Datadog via the v2 logs intake API
Send logs to Datadog Log Management. Logs arrive with service and source facets, the level mapped to Datadog’s status, and the full meta object as searchable attributes.
Setup
- Create an API key in Organization Settings → API Keys.
- Set the environment variables:
DD_API_KEY=your-api-key
DD_SITE=datadoghq.com # or datadoghq.eu, us3.datadoghq.com, us5.datadoghq.com, ap1.datadoghq.com
DD_SERVICE=my-api
- Wire the transport:
import { Elysia } from 'elysia'
import logixlysia from 'logixlysia'
import { createDatadogTransport } from 'logixlysia/datadog'
const app = new Elysia()
.use(
logixlysia({
config: {
transports: [createDatadogTransport()]
}
})
)
.get('/', () => 'ok')
.listen(3000)
- Trigger a request and open Logs → Explorer in Datadog.
Environment Variables
| Variable | Required | Description |
|---|---|---|
DD_API_KEY |
Yes | API key, sent as the DD-API-KEY header |
DD_SITE |
No | Datadog site (default datadoghq.com) |
DD_SERVICE |
No | service facet (default logixlysia) |
DD_HOSTNAME |
No | hostname on each log; omitted when unset |
Options
const datadog = createDatadogTransport({
service: 'my-api',
tags: { env: 'production', team: 'backend' }
})
| Option | Type | Default | Description |
|---|---|---|---|
apiKey |
string |
DD_API_KEY |
Datadog API key |
site |
string |
datadoghq.com |
Datadog site / region |
service |
string |
logixlysia |
service facet |
source |
string |
logixlysia |
ddsource facet |
hostname |
string |
DD_HOSTNAME |
Reported hostname |
tags |
Record<string, string> |
— | Rendered into ddtags as key:value pairs |
Plus the shared batching options: maxBatchSize, flushIntervalMs, timeout, retries — see the overview.
Payload
Logs post to https://http-intake.logs.{site}/api/v2/logs:
status— the log level lowercased (info,warning,error), which Datadog’s default status remapper picks up for severity coloring.http.status_code— the HTTP response status from access logs, following Datadog’s standard attribute so response-code facets work out of the box.- Attributes — the full meta object rides along nested (
request.method,context.requestId,durationMs, …), searchable with@request.method:GETstyle queries.
Troubleshooting
403— the API key is invalid, or it belongs to a different site thanDD_SITE; keys are region-scoped.- Wrong region — EU organizations must set
DD_SITE=datadoghq.eu; a wrong site surfaces as a non-2xx response through theonErrorhook or stderr. - Levels look wrong — if you customized the status remapper in a log pipeline, map it to the
statusattribute.