38
38
#include < opentelemetry/sdk/trace/simple_processor_factory.h>
39
39
#include < opentelemetry/sdk/trace/tracer_provider_factory.h>
40
40
41
+ #include < opentelemetry/exporters/ostream/log_record_exporter.h>
42
+ #include < opentelemetry/exporters/ostream/log_record_exporter_factory.h>
43
+
41
44
#include < opentelemetry/exporters/otlp/otlp_environment.h>
42
45
#include < opentelemetry/exporters/otlp/otlp_http.h>
43
46
#include < opentelemetry/exporters/otlp/otlp_http_exporter_factory.h>
@@ -73,22 +76,6 @@ init_otel_tracer()
73
76
std::shared_ptr<opentelemetry::trace::TracerProvider>{ std::move (provider) });
74
77
}
75
78
76
- void
77
- init_otel_logger ()
78
- {
79
- opentelemetry::exporter::otlp::OtlpHttpLogRecordExporterOptions logger_options;
80
- auto exporter =
81
- opentelemetry::exporter::otlp::OtlpHttpLogRecordExporterFactory::Create (logger_options);
82
- auto processor =
83
- opentelemetry::sdk::logs::SimpleLogRecordProcessorFactory::Create (std::move (exporter));
84
- std::vector<std::unique_ptr<opentelemetry::sdk::logs::LogRecordProcessor>> processors;
85
- processors.emplace_back (std::move (processor));
86
- auto context = opentelemetry::sdk::logs::LoggerContextFactory::Create (std::move (processors));
87
- std::shared_ptr<opentelemetry::logs::LoggerProvider> provider =
88
- opentelemetry::sdk::logs::LoggerProviderFactory::Create (std::move (context));
89
- opentelemetry::logs::Provider::SetLoggerProvider (provider);
90
- }
91
-
92
79
class get_app : public CLI ::App
93
80
{
94
81
public:
@@ -123,20 +110,22 @@ class get_app : public CLI::App
123
110
json_lines_,
124
111
" Use JSON Lines format (https://jsonlines.org) to print results." );
125
112
113
+ add_flag (" --use-http-logger" , use_http_logger_, " Use HTTP logger instead of ostream." );
114
+
126
115
add_common_options (this , common_options_);
127
116
allow_extras (true );
128
117
}
129
118
130
119
[[nodiscard]] auto get_otel_tracer () const -> std::shared_ptr<opentelemetry::trace::Tracer>
131
120
{
132
121
auto provider = opentelemetry::trace::Provider::GetTracerProvider ();
133
- return provider->GetTracer (" cbc" , couchbase::core::meta::sdk_version ());
122
+ return provider->GetTracer (" cbc" , couchbase::core::meta::sdk_semver ());
134
123
}
135
124
136
125
[[nodiscard]] auto get_otel_logger () const -> std::shared_ptr<opentelemetry::logs::Logger>
137
126
{
138
127
auto provider = opentelemetry::logs::Provider::GetLoggerProvider ();
139
- return provider->GetLogger (" cbc_logger" , " cbc" , OPENTELEMETRY_SDK_VERSION );
128
+ return provider->GetLogger (" cbc_logger" , " cbc" , couchbase::core::meta::sdk_semver () );
140
129
}
141
130
142
131
[[nodiscard]] auto execute () const -> int
@@ -204,7 +193,16 @@ class get_app : public CLI::App
204
193
auto get_options = common_get_options;
205
194
get_options.parent_span (couchbase::core::tracing::otel_request_span::wrap (span));
206
195
auto [err, resp] = collection.get (document_id, get_options).get ();
207
- logger->Error (" error: {}" , err.ec ().message (), span->GetContext ());
196
+ logger->Warn (" this is the message error" );
197
+ logger->Warn (" this is the message error: {msg}" ,
198
+ opentelemetry::common::MakeAttributes ({
199
+ { " msg" , err.ec ().message () },
200
+ }));
201
+ logger->Warn (" this is the message error: {msg} and some context" ,
202
+ opentelemetry::common::MakeAttributes ({
203
+ { " msg" , err.ec ().message () },
204
+ }), span->GetContext ());
205
+ logger->Error (" this is the message error: {}" , err.ec ().message (), span->GetContext ());
208
206
209
207
if (json_lines_) {
210
208
print_result_json_line (bucket_name, scope_name, collection_name, document_id, err, resp);
@@ -313,6 +311,32 @@ class get_app : public CLI::App
313
311
}
314
312
}
315
313
314
+ void init_otel_logger () const
315
+ {
316
+ using namespace opentelemetry ;
317
+
318
+ if (use_http_logger_) {
319
+ exporter::otlp::OtlpHttpLogRecordExporterOptions logger_options;
320
+ auto exporter = exporter::otlp::OtlpHttpLogRecordExporterFactory::Create (logger_options);
321
+ auto processor = sdk::logs::SimpleLogRecordProcessorFactory::Create (std::move (exporter));
322
+ std::vector<std::unique_ptr<sdk::logs::LogRecordProcessor>> processors;
323
+ processors.emplace_back (std::move (processor));
324
+ auto context = sdk::logs::LoggerContextFactory::Create (std::move (processors));
325
+ std::shared_ptr<logs::LoggerProvider> provider =
326
+ sdk::logs::LoggerProviderFactory::Create (std::move (context));
327
+ logs::Provider::SetLoggerProvider (provider);
328
+ } else {
329
+ auto exporter = exporter::logs::OStreamLogRecordExporterFactory::Create (std::cerr);
330
+ auto processor = sdk::logs::SimpleLogRecordProcessorFactory::Create (std::move (exporter));
331
+ std::vector<std::unique_ptr<sdk::logs::LogRecordProcessor>> processors;
332
+ processors.emplace_back (std::move (processor));
333
+ auto context = sdk::logs::LoggerContextFactory::Create (std::move (processors));
334
+ std::shared_ptr<logs::LoggerProvider> provider =
335
+ sdk::logs::LoggerProviderFactory::Create (std::move (context));
336
+ logs::Provider::SetLoggerProvider (provider);
337
+ }
338
+ }
339
+
316
340
common_options common_options_{};
317
341
318
342
std::string bucket_name_{ default_bucket_name };
@@ -326,6 +350,8 @@ class get_app : public CLI::App
326
350
bool json_lines_{ false };
327
351
bool verbose_{ false };
328
352
353
+ bool use_http_logger_{ false };
354
+
329
355
std::vector<std::string> ids_{};
330
356
};
331
357
} // namespace
0 commit comments