@@ -20,21 +20,19 @@ namespace trace_api = opentelemetry::trace;
20
20
namespace trace_sdk = opentelemetry::sdk::trace;
21
21
namespace nostd = opentelemetry::nostd;
22
22
23
- InMemorySpanExporter *memory_span_exporter;
24
-
25
23
namespace
26
24
{
27
- void initTracer ()
25
+ InMemorySpanExporter * initTracer ()
28
26
{
29
27
auto exporter1 = std::unique_ptr<trace_sdk::SpanExporter>(
30
28
new opentelemetry::exporter::trace::OStreamSpanExporter);
31
29
auto processor1 = std::unique_ptr<trace_sdk::SpanProcessor>(
32
30
new trace_sdk::SimpleSpanProcessor (std::move (exporter1)));
33
31
34
- auto exporter2 = std::unique_ptr<trace_sdk::SpanExporter>(new InMemorySpanExporter ());
32
+ InMemorySpanExporter *memory_span_exporter = new InMemorySpanExporter ();
33
+ auto exporter2 = std::unique_ptr<trace_sdk::SpanExporter>(memory_span_exporter);
35
34
36
35
// fetch the exporter for dumping data later
37
- memory_span_exporter = dynamic_cast <InMemorySpanExporter *>(exporter2.get ());
38
36
39
37
auto processor2 = std::unique_ptr<trace_sdk::SpanProcessor>(
40
38
new trace_sdk::SimpleSpanProcessor (std::move (exporter2)));
@@ -44,6 +42,8 @@ void initTracer()
44
42
provider->AddProcessor (std::move (processor2));
45
43
// Set the global trace provider
46
44
trace_api::Provider::SetTracerProvider (std::move (provider));
45
+
46
+ return memory_span_exporter;
47
47
}
48
48
49
49
void dumpSpans (std::vector<std::unique_ptr<trace_sdk::SpanData>> &spans)
@@ -81,7 +81,7 @@ void dumpSpans(std::vector<std::unique_ptr<trace_sdk::SpanData>> &spans)
81
81
int main ()
82
82
{
83
83
// Removing this line will leave the default noop TracerProvider in place.
84
- initTracer ();
84
+ InMemorySpanExporter *memory_span_exporter = initTracer ();
85
85
86
86
foo_library ();
87
87
auto memory_spans = memory_span_exporter->GetData ()->GetSpans ();
0 commit comments