InMemoryExporter keeps span data in process memory instead of reporting it to an external platform. It organizes spans by session_id, which is useful for local debugging, testing, and dumping a session’s trace data to a JSON file for offline analysis.
Locally retained spans are bounded by configurable limits; the oldest spans are evicted when either limit is reached. Multiple tracers under the same TracerProvider share one in-memory exporter instance.
When to use
- Local development and debugging of agent execution flows;
- Verifying spans in unit or integration tests;
- Offline environments without external platform connectivity, where you need to retain and analyze trace data locally.
Automatic management
InMemoryExporter is created and managed automatically by OpentelemetryTracer and records completed, sampled spans. It therefore cannot be added explicitly to the exporters list of OpentelemetryTracer, or initialization fails.
TracerProvider share a single InMemoryExporter instance; the first tracer registers it and subsequent tracers reuse the registered exporter.
Usage
After a session run finishes, call the tracer’sdump method to export that session’s spans to a local JSON file:
app.py
Local cache limits
The in-memory exporter enforces dual limits on locally retained spans — by span count and by estimated data size. When either limit is reached, the oldest span is evicted. A single span that exceeds the byte limit is not retained locally but is still forwarded to configured cloud exporters as before. By default, the most recent 1024 spans are retained, with an estimated data cap of 16 MiB.tracer.dump() writes an empty array. When caching is enabled, dump() returns only the session history still retained; if a span used to correlate a session has been evicted, the corresponding trace may no longer appear in local exports. Query the full history on your cloud observability platform.
The byte figure is an estimate of cached data and does not represent a process-wide memory limit. The configuration takes effect when the cache is first created; changing it requires restarting the application or creating a new TracerProvider.
Parameters
Constructor parameters
InMemoryExporter usually does not need to be constructed by hand; its constructor parameters are:
dump method parameters
OpentelemetryTracer.dump relies on spans retained by the in-memory exporter, with the following parameters:
The dump file is named like
{name}_{user_id}_{session_id}_{trace_id}.json, and its content is a list of spans, each containing the name, span_id, trace_id, start/end times, attributes, and parent span.
Checking the export
Complete model configuration, save the example asapp.py, and run python app.py. The printed file path should exist, and its JSON list should contain spans from this model call
In-memory data is lost when the process exits. Session filtering relies on session identifiers recorded by model-call spans. The file can be empty if no relevant model span was recorded, sampling omitted the data, or the session ID differs. user_id names the output file; it does not filter spans or enforce access control