http_log_main.cc 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <iostream>
  4. #include <memory>
  5. #include <string>
  6. #include <utility>
  7. #include "opentelemetry/exporters/otlp/otlp_environment.h"
  8. #include "opentelemetry/exporters/otlp/otlp_http.h"
  9. #include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
  10. #include "opentelemetry/exporters/otlp/otlp_http_exporter_options.h"
  11. #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_factory.h"
  12. #include "opentelemetry/exporters/otlp/otlp_http_log_record_exporter_options.h"
  13. #include "opentelemetry/logs/logger_provider.h"
  14. #include "opentelemetry/sdk/common/global_log_handler.h"
  15. #include "opentelemetry/sdk/logs/exporter.h"
  16. #include "opentelemetry/sdk/logs/logger_provider.h"
  17. #include "opentelemetry/sdk/logs/logger_provider_factory.h"
  18. #include "opentelemetry/sdk/logs/processor.h"
  19. #include "opentelemetry/sdk/logs/provider.h"
  20. #include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
  21. #include "opentelemetry/sdk/trace/exporter.h"
  22. #include "opentelemetry/sdk/trace/processor.h"
  23. #include "opentelemetry/sdk/trace/provider.h"
  24. #include "opentelemetry/sdk/trace/simple_processor_factory.h"
  25. #include "opentelemetry/sdk/trace/tracer_provider.h"
  26. #include "opentelemetry/sdk/trace/tracer_provider_factory.h"
  27. #include "opentelemetry/trace/tracer_provider.h"
  28. #ifdef BAZEL_BUILD
  29. # include "examples/common/logs_foo_library/foo_library.h"
  30. #else
  31. # include "logs_foo_library/foo_library.h"
  32. #endif
  33. namespace trace = opentelemetry::trace;
  34. namespace otlp = opentelemetry::exporter::otlp;
  35. namespace logs_sdk = opentelemetry::sdk::logs;
  36. namespace logs = opentelemetry::logs;
  37. namespace trace_sdk = opentelemetry::sdk::trace;
  38. namespace internal_log = opentelemetry::sdk::common::internal_log;
  39. namespace
  40. {
  41. opentelemetry::exporter::otlp::OtlpHttpExporterOptions trace_opts;
  42. std::shared_ptr<opentelemetry::sdk::trace::TracerProvider> tracer_provider;
  43. void InitTracer()
  44. {
  45. if (trace_opts.url.size() > 9)
  46. {
  47. if (trace_opts.url.substr(trace_opts.url.size() - 8) == "/v1/logs")
  48. {
  49. trace_opts.url = trace_opts.url.substr(0, trace_opts.url.size() - 8) + "/v1/traces";
  50. }
  51. else if (trace_opts.url.substr(trace_opts.url.size() - 9) == "/v1/logs/")
  52. {
  53. trace_opts.url = trace_opts.url.substr(0, trace_opts.url.size() - 9) + "/v1/traces";
  54. }
  55. else
  56. {
  57. trace_opts.url = opentelemetry::exporter::otlp::GetOtlpDefaultHttpTracesEndpoint();
  58. }
  59. }
  60. std::cout << "Using " << trace_opts.url << " to export trace spans." << '\n';
  61. // Create OTLP exporter instance
  62. auto exporter = otlp::OtlpHttpExporterFactory::Create(trace_opts);
  63. auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
  64. tracer_provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
  65. // Set the global trace provider
  66. std::shared_ptr<opentelemetry::trace::TracerProvider> api_provider = tracer_provider;
  67. trace_sdk::Provider::SetTracerProvider(api_provider);
  68. }
  69. void CleanupTracer()
  70. {
  71. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  72. if (tracer_provider)
  73. {
  74. tracer_provider->ForceFlush();
  75. }
  76. tracer_provider.reset();
  77. std::shared_ptr<opentelemetry::trace::TracerProvider> none;
  78. trace_sdk::Provider::SetTracerProvider(none);
  79. }
  80. opentelemetry::exporter::otlp::OtlpHttpLogRecordExporterOptions logger_opts;
  81. std::shared_ptr<opentelemetry::sdk::logs::LoggerProvider> logger_provider;
  82. void InitLogger()
  83. {
  84. std::cout << "Using " << logger_opts.url << " to export log records." << '\n';
  85. logger_opts.console_debug = true;
  86. // Create OTLP exporter instance
  87. auto exporter = otlp::OtlpHttpLogRecordExporterFactory::Create(logger_opts);
  88. auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
  89. logger_provider = logs_sdk::LoggerProviderFactory::Create(std::move(processor));
  90. std::shared_ptr<opentelemetry::logs::LoggerProvider> api_provider = logger_provider;
  91. logs_sdk::Provider::SetLoggerProvider(api_provider);
  92. }
  93. void CleanupLogger()
  94. {
  95. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  96. if (logger_provider)
  97. {
  98. logger_provider->ForceFlush();
  99. }
  100. logger_provider.reset();
  101. std::shared_ptr<logs::LoggerProvider> none;
  102. logs_sdk::Provider::SetLoggerProvider(none);
  103. }
  104. } // namespace
  105. /*
  106. Usage:
  107. - example_otlp_http_log
  108. - example_otlp_http_log <URL>
  109. - example_otlp_http_log <URL> <DEBUG>
  110. - example_otlp_http_log <URL> <DEBUG> <BIN>
  111. <DEBUG> = yes|no, to turn console debug on or off
  112. <BIN> = bin, to export in binary format
  113. */
  114. int main(int argc, char *argv[])
  115. {
  116. if (argc > 1)
  117. {
  118. trace_opts.url = argv[1];
  119. logger_opts.url = argv[1];
  120. if (argc > 2)
  121. {
  122. std::string debug = argv[2];
  123. trace_opts.console_debug = debug != "" && debug != "0" && debug != "no";
  124. }
  125. if (argc > 3)
  126. {
  127. std::string binary_mode = argv[3];
  128. if (binary_mode.size() >= 3 && binary_mode.substr(0, 3) == "bin")
  129. {
  130. trace_opts.content_type = opentelemetry::exporter::otlp::HttpRequestContentType::kBinary;
  131. logger_opts.content_type = opentelemetry::exporter::otlp::HttpRequestContentType::kBinary;
  132. }
  133. }
  134. }
  135. if (trace_opts.console_debug)
  136. {
  137. internal_log::GlobalLogHandler::SetLogLevel(internal_log::LogLevel::Debug);
  138. }
  139. InitLogger();
  140. InitTracer();
  141. foo_library();
  142. CleanupTracer();
  143. CleanupLogger();
  144. return 0;
  145. }