Logs

Every log, with its full trace attached.

Stop jumping between a log viewer and a trace viewer. Search by severity, service, or attribute, tail new logs live as they arrive, and open the exact request that produced any log line in one click.

Logs search with attribute filters applied
Filters

Include what matters. Exclude the noise.

Every filter is a pill you can see, edit, and remove. Flip the operator to not-equals to mute a chatty logger, and set a severity threshold to keep a level and everything above it.

Severity threshold dropdown
Attribute filter dialog with the Not equals operator selected
Filter pills, one equals and one not equals
Live tail

Watch logs arrive in realtime

Hit Live and the Logs page becomes a live tail. New records stream in at the top every few seconds, with every active filter still applied, so you can follow one service or one severity while you exercise your system.

  • One click to start tailing, one click to stop
  • Filters and severity thresholds apply to the tail
  • Scroll down to read without losing your place
  • Keeps up under bursts by jumping to the newest records
The Live button, active
Message templates

Structured logs, rendered like structured logs

Serilog-style message templates are resolved against each record's attributes. Parameter values are highlighted inline, and hovering one shows the parameter it came from. Placeholders without a matching attribute stay literal, so nothing is hidden.

A templated log message with the parameter name shown in a tooltip
Detail

Expand any line, pivot on anything

Click a log to see its raw body, the trace and span that produced it, and every attribute across the resource, scope, and log layers. Each attribute doubles as a filter toggle, so one interesting value becomes a search in a single click.

  • Raw body with linked trace and span IDs
  • All three attribute layers in one view
  • One-click filter pivots from any attribute value
Expanded log row with attributes
Built for correlation

Linked to traces. Native to OpenTelemetry.

Linked to every trace

Every log carries the trace and span ID of the request that emitted it. Open any endpoint and see the exact log lines tied to that invocation, or follow a distributed trace to see logs from every service it touched.

OpenTelemetry-native

Send logs from any OTel SDK: Node.js, Python, Go, Java, .NET, PHP. No vendor client needed. OTLP/HTTP supports Protobuf and JSON, with a 90-day TTL.

One log. One click to its trace.

Logs are included on every plan, from Starter to Enterprise.

FAQ

Questions about logs

How do I send logs to Traceway?

Point any OpenTelemetry Logs SDK at /api/otel/v1/logs with an Authorization: Bearer <project_token> header. Protobuf and JSON are both supported.

If you already run an OTel Collector, route its logs pipeline to the same endpoint.

Are logs linked to my traces automatically?

Yes. Every log carries the OTel trace_id and span_id from the active context at emission time. That means logs emitted inside a request handler, background job, or child span are automatically associated with the corresponding trace, with no extra plumbing required.

Can I tail logs in real time?

Yes. The Live button on the Logs page polls for new records every few seconds and streams them into the list, with all of your active filters applied. It works with any preset time range.

How long are logs retained?

90 days on Traceway Cloud. ClickHouse-backed storage with daily partitioning and TTL, so retention is enforced automatically without manual cleanup. Self-hosted deployments default to 30 days and are configurable.

Do logs count toward my event limit?

Logs have their own ingestion tier that scales with your plan. See the Cloud pricing page for current limits. Self-hosting is unlimited.