file_log_main.cc 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. // Copyright The OpenTelemetry Authors
  2. // SPDX-License-Identifier: Apache-2.0
  3. #include <functional>
  4. #include <iostream>
  5. #include <string>
  6. #include <utility>
  7. #include "opentelemetry/exporters/otlp/otlp_file_client_options.h"
  8. #include "opentelemetry/exporters/otlp/otlp_file_exporter_factory.h"
  9. #include "opentelemetry/exporters/otlp/otlp_file_exporter_options.h"
  10. #include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_factory.h"
  11. #include "opentelemetry/exporters/otlp/otlp_file_log_record_exporter_options.h"
  12. #include "opentelemetry/logs/logger_provider.h"
  13. #include "opentelemetry/nostd/shared_ptr.h"
  14. #include "opentelemetry/sdk/logs/exporter.h"
  15. #include "opentelemetry/sdk/logs/logger_provider.h"
  16. #include "opentelemetry/sdk/logs/logger_provider_factory.h"
  17. #include "opentelemetry/sdk/logs/processor.h"
  18. #include "opentelemetry/sdk/logs/provider.h"
  19. #include "opentelemetry/sdk/logs/simple_log_record_processor_factory.h"
  20. #include "opentelemetry/sdk/trace/exporter.h"
  21. #include "opentelemetry/sdk/trace/processor.h"
  22. #include "opentelemetry/sdk/trace/provider.h"
  23. #include "opentelemetry/sdk/trace/simple_processor_factory.h"
  24. #include "opentelemetry/sdk/trace/tracer_provider.h"
  25. #include "opentelemetry/sdk/trace/tracer_provider_factory.h"
  26. #include "opentelemetry/trace/tracer_provider.h"
  27. #ifdef BAZEL_BUILD
  28. # include "examples/common/logs_foo_library/foo_library.h"
  29. #else
  30. # include "logs_foo_library/foo_library.h"
  31. #endif
  32. namespace trace = opentelemetry::trace;
  33. namespace nostd = opentelemetry::nostd;
  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
  39. {
  40. opentelemetry::exporter::otlp::OtlpFileExporterOptions opts;
  41. opentelemetry::exporter::otlp::OtlpFileLogRecordExporterOptions log_opts;
  42. std::shared_ptr<opentelemetry::sdk::trace::TracerProvider> tracer_provider;
  43. std::shared_ptr<opentelemetry::sdk::logs::LoggerProvider> logger_provider;
  44. void InitTracer()
  45. {
  46. // Create OTLP exporter instance
  47. auto exporter = otlp::OtlpFileExporterFactory::Create(opts);
  48. auto processor = trace_sdk::SimpleSpanProcessorFactory::Create(std::move(exporter));
  49. tracer_provider = trace_sdk::TracerProviderFactory::Create(std::move(processor));
  50. // Set the global trace provider
  51. std::shared_ptr<opentelemetry::trace::TracerProvider> api_provider = tracer_provider;
  52. trace_sdk::Provider::SetTracerProvider(api_provider);
  53. }
  54. void CleanupTracer()
  55. {
  56. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  57. if (tracer_provider)
  58. {
  59. tracer_provider->ForceFlush();
  60. }
  61. tracer_provider.reset();
  62. std::shared_ptr<opentelemetry::trace::TracerProvider> none;
  63. trace_sdk::Provider::SetTracerProvider(none);
  64. }
  65. void InitLogger()
  66. {
  67. // Create OTLP exporter instance
  68. auto exporter = otlp::OtlpFileLogRecordExporterFactory::Create(log_opts);
  69. auto processor = logs_sdk::SimpleLogRecordProcessorFactory::Create(std::move(exporter));
  70. logger_provider = logs_sdk::LoggerProviderFactory::Create(std::move(processor));
  71. std::shared_ptr<opentelemetry::logs::LoggerProvider> api_provider = logger_provider;
  72. logs_sdk::Provider::SetLoggerProvider(api_provider);
  73. }
  74. void CleanupLogger()
  75. {
  76. // We call ForceFlush to prevent to cancel running exportings, It's optional.
  77. if (logger_provider)
  78. {
  79. logger_provider->ForceFlush();
  80. }
  81. logger_provider.reset();
  82. nostd::shared_ptr<logs::LoggerProvider> none;
  83. logs_sdk::Provider::SetLoggerProvider(none);
  84. }
  85. } // namespace
  86. int main(int argc, char *argv[])
  87. {
  88. if (argc > 1)
  89. {
  90. opentelemetry::exporter::otlp::OtlpFileClientFileSystemOptions fs_backend;
  91. fs_backend.file_pattern = argv[1];
  92. opts.backend_options = fs_backend;
  93. if (argc > 2)
  94. {
  95. opentelemetry::exporter::otlp::OtlpFileClientFileSystemOptions logs_fs_backend;
  96. logs_fs_backend.file_pattern = argv[2];
  97. log_opts.backend_options = logs_fs_backend;
  98. }
  99. else
  100. {
  101. log_opts.backend_options = std::ref(std::cout);
  102. }
  103. }
  104. else
  105. {
  106. opts.backend_options = std::ref(std::cout);
  107. }
  108. InitLogger();
  109. InitTracer();
  110. foo_library();
  111. CleanupTracer();
  112. CleanupLogger();
  113. return 0;
  114. }