У меня есть проблемы с составлением примера экспортера в пакетном экспортере журнала GRPC под Ubuntu 22, и я надеюсь получить некоторую помощь, указывающую на то, что не так в коде.cmake -DBUILD_TESTING=OFF -DWITH_EXAMPLES=OFF -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DBUILD_SHARED_LIBS=ON -DWITH_OTLP_HTTP=ON -DWITH_OTLP_GRPC=ON -DWITH_ABI_VERSION_1=OFF -DWITH_ABI_VERSION_2=ON -DWITH_STL=CXX17 -DCMAKE_CXX_STANDARD=17 ..
< /code>
Программа тестирования: < /p>
#include
#include
#include
#include "opentelemetry/sdk/logs/batch_log_record_processor.h"
#include "opentelemetry/sdk/logs/logger_provider_factory.h"
#include "opentelemetry/sdk/logs/logger_provider.h"
#include "opentelemetry/logs/provider.h"
#include "opentelemetry/sdk/version/version.h"
#include "opentelemetry/exporters/otlp/otlp_grpc_log_record_exporter_factory.h"
namespace api_logs = opentelemetry::logs;
namespace common = opentelemetry::common;
namespace otlp = opentelemetry::exporter::otlp;
namespace sdk_logs = opentelemetry::sdk::logs;
int main()
{
// exporter
otlp::OtlpGrpcLogRecordExporterOptions logger_opts_grpc;
logger_opts_grpc.endpoint = "localhost:4317"; // set collector endpoint
logger_opts_grpc.use_ssl_credentials = false; // true if TLS required
// processor
opentelemetry::sdk::logs::BatchLogRecordProcessorOptions batch_options;
batch_options.max_queue_size = 2048; // default: 2048
batch_options.schedule_delay_millis = std::chrono::milliseconds(500); // delay before forcing a flush
batch_options.max_export_batch_size = 512; // max logs per export
// build grpc log exporter, batch processor and provider
auto exporter = otlp::OtlpGrpcLogRecordExporterFactory::Create(logger_opts_grpc);
auto processor = std::make_unique(std::move(exporter), batch_options);
auto sdk_provider = sdk_logs::LoggerProviderFactory::Create(std::move(processor));
auto shared_provider = std::shared_ptr(std::move(sdk_provider));
// upcast shared_ptr to shared_ptr
std::shared_ptr provider = std::static_pointer_cast(shared_provider);
api_logs::Provider::SetLoggerProvider(provider);
// check
auto global_provider = api_logs::Provider::GetLoggerProvider();
std::cout
Ошибка призвана к Emitlogger; Это не нравится запись, которую я передаю: < /p>
In file included from /home/mandrews/downloads/github/opentelemetry-cpp/sdk/include/opentelemetry/sdk/logs/logger_provider.h:12,
from /home/mandrews/downloads/github/opentelemetry-cpp/sdk/include/opentelemetry/sdk/logs/logger_provider_factory.h:10,
from otel_test.cpp:6:
/home/mandrews/downloads/github/opentelemetry-cpp/api/include/opentelemetry/logs/logger.h: In instantiation of ‘void opentelemetry::v2::logs::Logger::EmitLogRecord(opentelemetry::v2::nostd::unique_ptr&&, ArgumentType&& ...) [with ArgumentType = {main()::}; opentelemetry::v2::nostd::unique_ptr = std::unique_ptr]’:
/home/mandrews/downloads/github/opentelemetry-cpp/api/include/opentelemetry/logs/logger.h:118:18: required from ‘void opentelemetry::v2::logs::Logger::EmitLogRecord(ArgumentType&& ...) [with ArgumentType = {main()::}]’
otel_test.cpp:53:23: required from here
/home/mandrews/downloads/github/opentelemetry-cpp/api/include/opentelemetry/logs/logger.h:88:98: error: no matching function for call to ‘opentelemetry::v2::logs::detail::LogRecordSetterTrait::Set(std::unique_ptr::pointer, main()::)’
88 | IgnoreTraitResult((detail::LogRecordSetterTrait::Set(
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
89 | log_record.get(), std::forward(args)),
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
< /code>
Это было закодировано в основном следуя фрагментам, которые я нашел в документах и в Интернете, и мне неясно, что я делаю не так. Тот же код компилизируется под VS2022, но с большим количеством предупреждений об emiterecord ()
Подробнее здесь: https://stackoverflow.com/questions/797 ... emitrecord