// Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 #include #include #include "opentelemetry/exporters/ostream/span_exporter_factory.h" #include "opentelemetry/sdk/trace/exporter.h" #include "opentelemetry/sdk/trace/processor.h" #include "opentelemetry/sdk/trace/provider.h" #include "opentelemetry/sdk/trace/simple_processor_factory.h" #include "opentelemetry/sdk/trace/tracer_provider.h" #include "opentelemetry/sdk/trace/tracer_provider_factory.h" #include "opentelemetry/trace/tracer_provider.h" #ifdef BAZEL_BUILD # include "examples/common/foo_library/foo_library.h" #else # include "foo_library/foo_library.h" #endif namespace trace_api = opentelemetry::trace; namespace trace_sdk = opentelemetry::sdk::trace; namespace trace_exporter = opentelemetry::exporter::trace; namespace { void InitTracer() { auto exporter = trace_exporter::OStreamSpanExporterFactory::Create(); auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter)); std::shared_ptr sdk_provider = trace_sdk::TracerProviderFactory::Create(std::move(processor)); // Set the global trace provider const std::shared_ptr &api_provider = sdk_provider; trace_sdk::Provider::SetTracerProvider(api_provider); } void CleanupTracer() { std::shared_ptr noop; trace_sdk::Provider::SetTracerProvider(noop); } } // namespace int main(int /* argc */, char ** /* argv */) { // Removing this line will leave the default noop TracerProvider in place. InitTracer(); foo_library(); CleanupTracer(); return 0; }