- Send logs from the Python SDK, either by emitting messages or by forwarding standard-library
loggingrecords. - Send logs from the TypeScript SDK, either by emitting messages or by forwarding
consoleoutput. - Send OpenTelemetry logs from any language that exports OTLP.

- Records a point in time, with zero duration.
- Has no children.
- Carries a severity level.
Send logs from the Python SDK
To send logs from Python, emit messages with a project logger’s severity methods, such asinfo() and error(), or forward existing records from the standard-library logging module with BraintrustLogHandler. The guide covers stored fields, message templates, and associating logs with a trace.
Send logs from the TypeScript SDK
To send logs from TypeScript, emit messages with a project logger’s severity methods, such asinfo() and error(), or forward existing console output with wrapConsole(). The guide covers stored fields, message templates, and associating logs with a trace.
Send OpenTelemetry logs
To forward OpenTelemetry logs, configure your exporter or Collector. You can also send Claude Code events to Braintrust as OpenTelemetry logs, including API requests, errors, and tool results.Inspect logs
- UI
- SQL
The Logs row type shows SDK messages, OTLP log records, and OpenTelemetry span events. The Traces and Spans row types also include log rows. A log that isn’t attached to a trace, such as an OTLP log record without a trace ID, appears in Traces as its own row. Log rows don’t offer scoring or human review actions.
- Go to Logs in your project. In the toolbar’s row type selector, choose Logs. This loads All logs view, with Dense rows and an all-time range.
- Choose a time range and use the search field to filter messages. The chart above the table groups messages by log level by default. See Explore the logs chart.
-
Select a message to inspect its contents:
- Output: The full message.
- Details: Log level, timestamp, span ID, and log ID.
- Metadata and Context: Additional fields, when present.

Filter by severity
- UI
- SQL
In the Logs row type, select the empty search field. It suggests a filter for each severity level, such as 
To filter on a message’s own level, open the menu beside Log level in Details and select Filter by this value.
span_attributes.log_level = 'warn' or span_attributes.log_level = 'error'. Choose one to apply it.

span_attributes.log_level value don’t match a severity filter. For OpenTelemetry logs and span events, see how Braintrust derives log levels.
View logs in a trace
- UI
- SQL
To inspect a message in context, select it in its trace’s hierarchy or Timeline. Log icons and timeline markers reflect the recorded severity, when present.Older messages can lack a preview in the trace hierarchy until you open them. The full message remains available in Output.

Next steps
- Filter and search to find records from a specific operation.
- Examine traces to inspect the operations surrounding a message.
- Send logs from the Python SDK to emit messages or forward
loggingrecords. - Send logs from the TypeScript SDK to emit messages or forward
consoleoutput. - Configure OpenTelemetry to connect existing instrumentation to Braintrust.