Skip to content

Structured logs

Authara Core writes one JSON object per line to standard output. The schema is designed for container log collectors and keeps operational events searchable without turning logs into a second store for request or customer data.

Every record contains these resource fields:

Field Meaning
timestamp UTC RFC 3339 timestamp
level debug, info, warn, or error
service Always authara
environment AUTHARA_LOG_ENVIRONMENT, or APP_ENV when unset
version Running Core version
instance_id Random UUID for the running process
event Stable event category

Event-specific fields are typed and bounded. Stable categories include request_completed, authentication_outcome, webhook_delivery, queue_outcome, worker_outcome, maintenance_outcome, and configuration_status. Fields such as component, operation, outcome, error_code, route, and status_class use closed values suitable for log queries and dashboards.

Privacy boundary

Core does not log raw errors, request paths or query strings, request or response bodies, headers, IP addresses, user agents, email addresses, user or organization identifiers, provider identifiers, SQL, secrets, or configuration values. HTTP records use the registered route template, such as /auth/users/{userID}, rather than the requested path. Unmatched or unsafe routes are recorded as unmatched.

X-Request-ID is accepted only when it is a canonical UUID v4 or v7. Missing or malformed values are replaced and the resulting identifier is returned in the response header. This permits correlation without accepting arbitrary caller-controlled log content.

Unknown events or fields fail closed as log_record_dropped. Each output line is valid JSON and is capped at 16 KiB, including its newline.

Configuration

Set LOG_LEVEL to control the minimum emitted level. Set AUTHARA_LOG_ENVIRONMENT to a bounded deployment name (1–32 letters, numbers, dots, underscores, or hyphens). If it is unset, Core uses APP_ENV.

Log collectors should parse the JSON body and promote only low-cardinality resource fields required by their deployment. Core itself does not prescribe a collector, backend, or label policy.