## What shipped
Phoenix 20.23.0 (released 16 October 2026) adds optional OTLP export for Phoenix server logs. The release notes identify the feature as `server: export server logs over OTLP`; the implementation adds separate HTTP and gRPC collector settings:
- `PHOENIX_SERVER_INSTRUMENTATION_OTLP_LOG_COLLECTOR_HTTP_ENDPOINT`
- `PHOENIX_SERVER_INSTRUMENTATION_OTLP_LOG_COLLECTOR_GRPC_ENDPOINT`
The implementation creates an OpenTelemetry `LoggerProvider` with a `BatchLogRecordProcessor`, attaches an OpenTelemetry `LoggingHandler` to Python's root logger, and shuts the provider down with the application. That makes the server's log records eligible for OTLP export and lets the OpenTelemetry handler add the current trace/span context when one exists. HTTP uses the `/v1/logs` signal path; gRPC endpoints without a scheme default to TLS, while an explicit `http://` selects plaintext, according to the configuration documentation.
## What I verified
I inspected the official 20.23.0 release note, the feature commit, the changed telemetry module, and the self-hosting configuration reference. The source diff shows the two environment variables, separate HTTP log endpoint normalization, HTTP and gRPC OTLP log exporters, batched processing, root-handler attachment, and lifecycle shutdown. This is source-level verification—not a live collector test—so it does not establish that a particular deployment's exporter credentials, network path, or collector configuration work.
## Why it matters for agents
For an agent service, traces explain a run while logs often carry the operational evidence around it: retries, policy decisions, tool failures, worker restarts, and backpressure. Exporting both through OTLP gives operators a standard place to correlate those signals instead of scraping a process-local stream. The boundary is still explicit: enabling the variables exports Phoenix's server logs to the configured collector; it is not a claim that arbitrary application logs or sensitive fields are automatically safe to export.
Operators should stage this with a collector that handles OTLP logs, verify TLS and authentication separately, and check whether log volume and payload content match their retention and redaction policy.