2
0

grpc_log_main.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include "opentelemetry/exporters/otlp/otlp_grpc_client_factory.h"
  4. #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_factory.h"
  5. #include "opentelemetry/exporters/otlp/otlp_grpc_exporter_options.h"
  6. #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h"
  7. #include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_options.h"
  8. #include "opentelemetry/logs/provider.h"
  9. #include "opentelemetry/sdk/logs/exporter.h"
  10. #include "opentelemetry/sdk/logs/logger_provider.h"
  11. #include "opentelemetry/sdk/logs/logger_provider_factory.h"
  12. #include "opentelemetry/sdk/logs/processor.h"
  13. #include "opentelemetry/sdk/logs/provider.h"
  14. #include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
  15. #include "opentelemetry/sdk/trace/exporter.h"
  16. #include "opentelemetry/sdk/trace/processor.h"
  17. #include "opentelemetry/sdk/trace/provider.h"
  18. #include "opentelemetry/sdk/trace/simple_processor_factory.h"
  19. #include "opentelemetry/sdk/trace/tracer_provider.h"
  20. #include "opentelemetry/sdk/trace/tracer_provider_factory.h"
  21. #include "opentelemetry/trace/provider.h"
  22. #include <string>
  23. #ifdef BAZEL_BUILD
  24. # include "examples/common/logs_foo_library/foo_library.h"
  25. #else
  26. # include "logs_foo_library/foo_library.h"
  27. #endif
  28. namespace trace = opentelemetry::trace;
  29. namespace nostd = opentelemetry::nostd;
  30. namespace otlp = opentelemetry::exporter::otlp;
  31. namespace logs_sdk = opentelemetry::sdk::logs;
  32. namespace logs = opentelemetry::logs;
  33. namespace trace_sdk = opentelemetry::sdk::trace;
  34. namespace
  35. {
  36. opentelemetry::exporter::otlp::OtlpGrpcExporterOptions opts;
  37. opentelemetry::exporter::otlp::OtlpGrpcLogRecordExporterOptions log_opts;
  38. std::shared_ptr<opentelemetry::sdk::trace::TracerProvider> tracer_provider;
  39. std::shared_ptr<opentelemetry::sdk::logs::LoggerProvider> logger_provider;
  40. void InitTracer(const std::shared_ptr<otlp::OtlpGrpcClient> &shared_client)
  41. {
  42. // Create OTLP exporter instance
  43. auto exporter = otlp::OtlpGrpcExporterFactory::Create(opts, shared_client);
  44. auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
  45. tracer_provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
  46. // Set the global trace provider
  47. std::shared_ptr<opentelemetry::trace::TracerProvider> api_provider = tracer_provider;
  48. trace_sdk::Provider::SetTracerProvider(api_provider);
  49. }
  50. void CleanupTracer()
  51. {
  52. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  53. if (tracer_provider)
  54. {
  55. tracer_provider->ForceFlush();
  56. }
  57. tracer_provider.reset();
  58. std::shared_ptr<opentelemetry::trace::TracerProvider> none;
  59. trace_sdk::Provider::SetTracerProvider(none);
  60. }
  61. void InitLogger(const std::shared_ptr<otlp::OtlpGrpcClient> &shared_client)
  62. {
  63. // Create OTLP exporter instance
  64. auto exporter = otlp::OtlpGrpcLogRecordExporterFactory::Create(log_opts, shared_client);
  65. auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
  66. logger_provider = logs_sdk::LoggerProviderFactory::Create(std::move(processor));
  67. // Set the global logger provider
  68. std::shared_ptr<opentelemetry::logs::LoggerProvider> api_provider = logger_provider;
  69. logs_sdk::Provider::SetLoggerProvider(api_provider);
  70. }
  71. void CleanupLogger()
  72. {
  73. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  74. if (logger_provider)
  75. {
  76. logger_provider->ForceFlush();
  77. }
  78. logger_provider.reset();
  79. nostd::shared_ptr<logs::LoggerProvider> none;
  80. logs_sdk::Provider::SetLoggerProvider(none);
  81. }
  82. } // namespace
  83. int main(int argc, char *argv[])
  84. {
  85. if (argc > 1)
  86. {
  87. opts.endpoint = argv[1];
  88. log_opts.endpoint = argv[1];
  89. if (argc > 2)
  90. {
  91. opts.use_ssl_credentials = true;
  92. log_opts.use_ssl_credentials = true;
  93. opts.ssl_credentials_cacert_path = argv[2];
  94. log_opts.ssl_credentials_cacert_path = argv[2];
  95. }
  96. }
  97. std::shared_ptr<otlp::OtlpGrpcClient> shared_client = otlp::OtlpGrpcClientFactory::Create(opts);
  98. InitLogger(shared_client);
  99. InitTracer(shared_client);
  100. foo_library();
  101. CleanupTracer();
  102. CleanupLogger();
  103. return 0;
  104. }