From 3349d146aa68ae6545f335fa55b0f30906766fd6 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Wed, 8 Dec 2021 22:48:38 +0000 Subject: [PATCH 01/15] otlp_http_log --- api/include/opentelemetry/logs/logger_provider.h | 6 ++++-- api/include/opentelemetry/logs/noop.h | 6 ++++-- .../exporters/otlp/otlp_log_recordable.h | 14 ++++++++++++-- sdk/include/opentelemetry/sdk/logs/logger.h | 9 +++++++-- .../opentelemetry/sdk/logs/logger_provider.h | 6 ++++-- sdk/include/opentelemetry/sdk/logs/recordable.h | 9 +++++++++ sdk/src/logs/logger.cc | 9 +++++++-- sdk/src/logs/logger_provider.cc | 13 +++++++++---- 8 files changed, 56 insertions(+), 16 deletions(-) diff --git a/api/include/opentelemetry/logs/logger_provider.h b/api/include/opentelemetry/logs/logger_provider.h index 93ba683f94..1935f0eeb5 100644 --- a/api/include/opentelemetry/logs/logger_provider.h +++ b/api/include/opentelemetry/logs/logger_provider.h @@ -31,10 +31,12 @@ class LoggerProvider */ virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options = "") = 0; + nostd::string_view options = "", + nostd::string_view schema_url = "") = 0; virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args) = 0; + nostd::span args, + nostd::string_view schema_url) = 0; }; } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h index a61507093c..046b9d4a7f 100644 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -65,13 +65,15 @@ class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider {} nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options) override + nostd::string_view options, + nostd::string_view schema_url) override { return logger_; } nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args) override + nostd::span args, + nostd::string_view schema_url) override { return logger_; } diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h index 368505ca2a..582fd553ba 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h @@ -9,6 +9,7 @@ # include "opentelemetry/proto/logs/v1/logs.pb.h" # include "opentelemetry/proto/resource/v1/resource.pb.h" +# include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" # include "opentelemetry/exporters/otlp/protobuf_include_suffix.h" // clang-format on @@ -94,14 +95,23 @@ class OtlpLogRecordable final : public opentelemetry::sdk::logs::Recordable */ virtual void SetTraceFlags(opentelemetry::trace::TraceFlags trace_flags) noexcept override; + /** + * Set instrumentation_library for this log. + * @param instrumentation_library the instrumentation library to set + */ + void SetInstrumentationLibrary( + std::unique_ptr + instrumentation_library) noexcept override + {} + private: proto::logs::v1::LogRecord log_record_; opentelemetry::sdk::common::AttributeMap resource_attributes_; // TODO shared resource // const opentelemetry::sdk::resource::Resource *resource_ = nullptr; // TODO InstrumentationLibrary - // const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary - // *instrumentation_library_ = nullptr; + opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary *instrumentation_library_ = + nullptr; }; } // namespace otlp diff --git a/sdk/include/opentelemetry/sdk/logs/logger.h b/sdk/include/opentelemetry/sdk/logs/logger.h index 4fd1ed89ed..7b5f36a774 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger.h +++ b/sdk/include/opentelemetry/sdk/logs/logger.h @@ -5,6 +5,7 @@ #ifdef ENABLE_LOGS_PREVIEW # include "opentelemetry/logs/logger.h" +# include "opentelemetry/sdk/instrumentationlibrary/instrumentation_library.h" # include "opentelemetry/sdk/logs/logger_provider.h" # include "opentelemetry/sdk/logs/processor.h" @@ -25,8 +26,11 @@ class Logger final : public opentelemetry::logs::Logger * @param name The name of this logger instance * @param logger_provider The logger provider that owns this logger. */ - explicit Logger(opentelemetry::nostd::string_view name, - std::shared_ptr logger_provider) noexcept; + explicit Logger( + opentelemetry::nostd::string_view name, + std::shared_ptr logger_provider, + std::unique_ptr instrumentation_library = + instrumentationlibrary::InstrumentationLibrary::Create("")) noexcept; /** * Returns the name of this logger. @@ -64,6 +68,7 @@ class Logger final : public opentelemetry::logs::Logger // The logger provider of this Logger. Uses a weak_ptr to avoid cyclic dependency issues the with // logger provider std::weak_ptr logger_provider_; + std::shared_ptr instrumentation_library_; }; } // namespace logs diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h index db07ba5f66..6613317857 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -47,7 +47,8 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, */ opentelemetry::nostd::shared_ptr GetLogger( opentelemetry::nostd::string_view name, - opentelemetry::nostd::string_view options = "") noexcept override; + opentelemetry::nostd::string_view options = "", + nostd::string_view schema_url = "") noexcept override; /** * Creates a logger with the given name, and returns a shared pointer to it. @@ -58,7 +59,8 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, */ opentelemetry::nostd::shared_ptr GetLogger( opentelemetry::nostd::string_view name, - nostd::span args) noexcept override; + nostd::span args, + nostd::string_view schema_url) noexcept override; /** * Returns a shared pointer to the processor currently stored in the diff --git a/sdk/include/opentelemetry/sdk/logs/recordable.h b/sdk/include/opentelemetry/sdk/logs/recordable.h index db730752d2..de609b3c79 100644 --- a/sdk/include/opentelemetry/sdk/logs/recordable.h +++ b/sdk/include/opentelemetry/sdk/logs/recordable.h @@ -19,6 +19,7 @@ # include "opentelemetry/version.h" # include +# include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -92,6 +93,14 @@ class Recordable * @param trace_flags the trace flags to set */ virtual void SetTraceFlags(opentelemetry::trace::TraceFlags trace_flags) noexcept = 0; + + /** + * Set instrumentation_library for this log. + * @param instrumentation_library the instrumentation library to set + */ + virtual void SetInstrumentationLibrary( + std::unique_ptr + instrumentation_library) noexcept = 0; }; } // namespace logs } // namespace sdk diff --git a/sdk/src/logs/logger.cc b/sdk/src/logs/logger.cc index 735b527b80..bd66c1e5e5 100644 --- a/sdk/src/logs/logger.cc +++ b/sdk/src/logs/logger.cc @@ -16,8 +16,13 @@ namespace trace_api = opentelemetry::trace; namespace nostd = opentelemetry::nostd; namespace common = opentelemetry::common; -Logger::Logger(nostd::string_view name, std::shared_ptr logger_provider) noexcept - : logger_name_(std::string(name)), logger_provider_(logger_provider) +Logger::Logger(nostd::string_view name, + std::shared_ptr logger_provider, + std::unique_ptr + instrumentation_library) noexcept + : logger_name_(std::string(name)), + logger_provider_(logger_provider), + instrumentation_library_{std::move(instrumentation_library)} {} const nostd::string_view Logger::GetName() noexcept diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 58e6a75ea4..7dea6f8daf 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -16,8 +16,10 @@ namespace logs_api = opentelemetry::logs; LoggerProvider::LoggerProvider() noexcept : processor_{nullptr} {} -nostd::shared_ptr LoggerProvider::GetLogger(nostd::string_view name, - nostd::string_view options) noexcept +nostd::shared_ptr LoggerProvider::GetLogger( + nostd::string_view name, + nostd::string_view options, + nostd::string_view schema_url) noexcept { // Ensure only one thread can read/write from the map of loggers std::lock_guard lock_guard{mu_}; @@ -44,14 +46,17 @@ nostd::shared_ptr LoggerProvider::GetLogger(nostd::string_view // If no logger with that name exists yet, create it and add it to the map of loggers - nostd::shared_ptr logger(new Logger(name, this->shared_from_this())); + auto lib = instrumentationlibrary::InstrumentationLibrary::Create(name, name, schema_url); + nostd::shared_ptr logger( + new Logger(name, this->shared_from_this(), std::move(lib))); loggers_[name.data()] = logger; return logger; } nostd::shared_ptr LoggerProvider::GetLogger( nostd::string_view name, - nostd::span args) noexcept + nostd::span args, + nostd::string_view schema_url) noexcept { // Currently, no args support return GetLogger(name); From 73d026b6fd7cdc0c5d7810830d218a387bbf3955 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Thu, 9 Dec 2021 21:14:38 +0000 Subject: [PATCH 02/15] tests --- api/include/opentelemetry/logs/logger_provider.h | 2 +- api/include/opentelemetry/logs/noop.h | 4 ++-- api/test/logs/logger_test.cc | 8 ++++++-- api/test/logs/provider_test.cc | 8 ++++++-- .../exporters/elasticsearch/es_log_recordable.h | 5 +++++ .../include/opentelemetry/exporters/etw/etw_logger.h | 11 +++++++---- sdk/include/opentelemetry/sdk/logs/log_record.h | 5 +++++ sdk/include/opentelemetry/sdk/logs/logger_provider.h | 2 +- 8 files changed, 33 insertions(+), 12 deletions(-) mode change 100644 => 100755 api/include/opentelemetry/logs/logger_provider.h mode change 100644 => 100755 api/include/opentelemetry/logs/noop.h mode change 100644 => 100755 api/test/logs/logger_test.cc mode change 100644 => 100755 api/test/logs/provider_test.cc mode change 100644 => 100755 exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h mode change 100644 => 100755 exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h mode change 100644 => 100755 sdk/include/opentelemetry/sdk/logs/logger_provider.h diff --git a/api/include/opentelemetry/logs/logger_provider.h b/api/include/opentelemetry/logs/logger_provider.h old mode 100644 new mode 100755 index 1935f0eeb5..4ee3406309 --- a/api/include/opentelemetry/logs/logger_provider.h +++ b/api/include/opentelemetry/logs/logger_provider.h @@ -36,7 +36,7 @@ class LoggerProvider virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, nostd::span args, - nostd::string_view schema_url) = 0; + nostd::string_view schema_url = "") = 0; }; } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h old mode 100644 new mode 100755 index 046b9d4a7f..188a680ce6 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -66,14 +66,14 @@ class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider nostd::shared_ptr GetLogger(nostd::string_view logger_name, nostd::string_view options, - nostd::string_view schema_url) override + nostd::string_view schema_url = "") override { return logger_; } nostd::shared_ptr GetLogger(nostd::string_view logger_name, nostd::span args, - nostd::string_view schema_url) override + nostd::string_view schema_url = "") override { return logger_; } diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc old mode 100644 new mode 100755 index 99c7474280..b58578a5bb --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -92,12 +92,16 @@ class TestLogger : public Logger // Define a basic LoggerProvider class that returns an instance of the logger class defined above class TestProvider : public LoggerProvider { - shared_ptr GetLogger(string_view library_name, string_view options = "") override + shared_ptr GetLogger(string_view library_name, + string_view options = "", + nostd::string_view schema_url = "") override { return shared_ptr(new TestLogger()); } - shared_ptr GetLogger(string_view library_name, span args) override + shared_ptr GetLogger(string_view library_name, + span args, + nostd::string_view schema_url = "") override { return shared_ptr(new TestLogger()); } diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc old mode 100644 new mode 100755 index c9eb7bddc7..5adc1de1d4 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -20,12 +20,16 @@ using opentelemetry::nostd::string_view; class TestProvider : public LoggerProvider { - shared_ptr GetLogger(string_view library_name, string_view options) override + shared_ptr GetLogger(string_view library_name, + string_view options, + string_view schema_url = "") override { return shared_ptr(nullptr); } - shared_ptr GetLogger(string_view library_name, span args) override + shared_ptr GetLogger(string_view library_name, + span args, + string_view schema_url = "") override { return shared_ptr(nullptr); } diff --git a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h old mode 100644 new mode 100755 index 8a928d829e..d8cb416f4a --- a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h +++ b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h @@ -158,6 +158,11 @@ class ElasticSearchRecordable final : public sdk::logs::Recordable * Returns a JSON object contain the log information */ nlohmann::json GetJSON() noexcept { return json_; }; + + void SetInstrumentationLibrary( + std::unique_ptr + instrumentation_library) noexcept override + {} }; } // namespace logs } // namespace exporter diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h old mode 100644 new mode 100755 index 3420b3f5db..098a5c086e --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -222,8 +222,10 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider * - "XML" - XML events (reserved for future use) * @return */ - nostd::shared_ptr GetLogger(nostd::string_view name, - nostd::string_view args = "") override + nostd::shared_ptr GetLogger( + nostd::string_view name, + nostd::string_view args = "", + nostd::string_view schema_url = "") override { UNREFERENCED_PARAMETER(args); ETWProvider::EventFormat evtFmt = config_.encoding; @@ -233,9 +235,10 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider nostd::shared_ptr GetLogger( nostd::string_view name, - nostd::span args) override + nostd::span args, + nostd::string_view schema_url = "") override { - return GetLogger(name, args[0]); + return GetLogger(name, args[0], schema_url); } }; diff --git a/sdk/include/opentelemetry/sdk/logs/log_record.h b/sdk/include/opentelemetry/sdk/logs/log_record.h index 34ef5befb0..a15c0b7849 100644 --- a/sdk/include/opentelemetry/sdk/logs/log_record.h +++ b/sdk/include/opentelemetry/sdk/logs/log_record.h @@ -181,6 +181,11 @@ class LogRecord final : public Recordable * @return the timestamp for this log */ opentelemetry::common::SystemTimestamp GetTimestamp() const noexcept { return timestamp_; } + + void SetInstrumentationLibrary( + std::unique_ptr + instrumentation_library) noexcept override + {} }; } // namespace logs } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h old mode 100644 new mode 100755 index 6613317857..36a670912d --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -60,7 +60,7 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, opentelemetry::nostd::shared_ptr GetLogger( opentelemetry::nostd::string_view name, nostd::span args, - nostd::string_view schema_url) noexcept override; + nostd::string_view schema_url = "") noexcept override; /** * Returns a shared pointer to the processor currently stored in the From e90a7dc0ad5152f4d530d5d335dac3f23f67689d Mon Sep 17 00:00:00 2001 From: Oblivion Date: Fri, 10 Dec 2021 18:26:57 +0000 Subject: [PATCH 03/15] Fiy SetInstrumentation --- .../elasticsearch/es_log_recordable.h | 18 ++++++++++++++---- .../exporters/otlp/otlp_log_recordable.h | 11 +++++------ exporters/otlp/src/otlp_log_recordable.cc | 7 +++++++ .../opentelemetry/sdk/logs/log_record.h | 16 +++++++++++++--- .../opentelemetry/sdk/logs/recordable.h | 8 ++++++-- 5 files changed, 45 insertions(+), 15 deletions(-) diff --git a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h index d8cb416f4a..cc1177e21b 100755 --- a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h +++ b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h @@ -157,12 +157,22 @@ class ElasticSearchRecordable final : public sdk::logs::Recordable /** * Returns a JSON object contain the log information */ - nlohmann::json GetJSON() noexcept { return json_; }; + nlohmann::json GetJSON() noexcept { return json_; } + /** + * Set instrumentation_library for this log. + * @param instrumentation_library the instrumentation library to set + */ void SetInstrumentationLibrary( - std::unique_ptr - instrumentation_library) noexcept override - {} + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + &instrumentation_library) noexcept + { + instrumentation_library_ = &instrumentation_library; + } + +private: + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + *instrumentation_library_ = nullptr; }; } // namespace logs } // namespace exporter diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h index 582fd553ba..bc4fd38ad0 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h @@ -100,18 +100,17 @@ class OtlpLogRecordable final : public opentelemetry::sdk::logs::Recordable * @param instrumentation_library the instrumentation library to set */ void SetInstrumentationLibrary( - std::unique_ptr - instrumentation_library) noexcept override - {} + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + &instrumentation_library) noexcept override; private: proto::logs::v1::LogRecord log_record_; opentelemetry::sdk::common::AttributeMap resource_attributes_; // TODO shared resource // const opentelemetry::sdk::resource::Resource *resource_ = nullptr; - // TODO InstrumentationLibrary - opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary *instrumentation_library_ = - nullptr; + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + *instrumentation_library_ = nullptr; + }; } // namespace otlp diff --git a/exporters/otlp/src/otlp_log_recordable.cc b/exporters/otlp/src/otlp_log_recordable.cc index 5276b62690..92f12d7ef2 100644 --- a/exporters/otlp/src/otlp_log_recordable.cc +++ b/exporters/otlp/src/otlp_log_recordable.cc @@ -199,6 +199,13 @@ void OtlpLogRecordable::SetTraceFlags(opentelemetry::trace::TraceFlags trace_fla log_record_.set_flags(trace_flags.flags()); } +void OtlpLogRecordable::SetInstrumentationLibrary( + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + &instrumentation_library) noexcept +{ + instrumentation_library_ = &instrumentation_library; +} + } // namespace otlp } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/sdk/include/opentelemetry/sdk/logs/log_record.h b/sdk/include/opentelemetry/sdk/logs/log_record.h index a15c0b7849..290ac26b41 100644 --- a/sdk/include/opentelemetry/sdk/logs/log_record.h +++ b/sdk/include/opentelemetry/sdk/logs/log_record.h @@ -182,10 +182,20 @@ class LogRecord final : public Recordable */ opentelemetry::common::SystemTimestamp GetTimestamp() const noexcept { return timestamp_; } + /** + * Set instrumentation_library for this log. + * @param instrumentation_library the instrumentation library to set + */ void SetInstrumentationLibrary( - std::unique_ptr - instrumentation_library) noexcept override - {} + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + &instrumentation_library) noexcept + { + instrumentation_library_ = &instrumentation_library; + } + +private: + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + *instrumentation_library_ = nullptr; }; } // namespace logs } // namespace sdk diff --git a/sdk/include/opentelemetry/sdk/logs/recordable.h b/sdk/include/opentelemetry/sdk/logs/recordable.h index de609b3c79..89bb79da3e 100644 --- a/sdk/include/opentelemetry/sdk/logs/recordable.h +++ b/sdk/include/opentelemetry/sdk/logs/recordable.h @@ -99,8 +99,12 @@ class Recordable * @param instrumentation_library the instrumentation library to set */ virtual void SetInstrumentationLibrary( - std::unique_ptr - instrumentation_library) noexcept = 0; + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + &instrumentation_library) noexcept = 0; + +private: + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary + *instrumentation_library_ = nullptr; }; } // namespace logs } // namespace sdk From d77e4c5d4bf274ce351be513e6c660e51ebd571a Mon Sep 17 00:00:00 2001 From: Oblivion Date: Fri, 10 Dec 2021 22:08:21 +0000 Subject: [PATCH 04/15] otlp_log_recordable test --- .../exporters/elasticsearch/es_log_recordable.h | 7 +++++++ .../opentelemetry/exporters/otlp/otlp_log_recordable.h | 5 ++++- exporters/otlp/src/otlp_log_recordable.cc | 5 +++++ exporters/otlp/test/otlp_log_recordable_test.cc | 9 +++++++++ sdk/include/opentelemetry/sdk/logs/logger.h | 4 ++++ sdk/src/logs/logger.cc | 6 ++++++ 6 files changed, 35 insertions(+), 1 deletion(-) diff --git a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h index cc1177e21b..fcd5e9fd1e 100755 --- a/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h +++ b/exporters/elasticsearch/include/opentelemetry/exporters/elasticsearch/es_log_recordable.h @@ -170,6 +170,13 @@ class ElasticSearchRecordable final : public sdk::logs::Recordable instrumentation_library_ = &instrumentation_library; } + /** Returns the associated instruementation library */ + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary & + GetInstrumentationLibrary() const noexcept + { + return *instrumentation_library_; + } + private: const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary *instrumentation_library_ = nullptr; diff --git a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h index bc4fd38ad0..6b1d1eb0f2 100644 --- a/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h +++ b/exporters/otlp/include/opentelemetry/exporters/otlp/otlp_log_recordable.h @@ -103,6 +103,10 @@ class OtlpLogRecordable final : public opentelemetry::sdk::logs::Recordable const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary &instrumentation_library) noexcept override; + /** Returns the associated instruementation library */ + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary & + GetInstrumentationLibrary() const noexcept; + private: proto::logs::v1::LogRecord log_record_; opentelemetry::sdk::common::AttributeMap resource_attributes_; @@ -110,7 +114,6 @@ class OtlpLogRecordable final : public opentelemetry::sdk::logs::Recordable // const opentelemetry::sdk::resource::Resource *resource_ = nullptr; const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary *instrumentation_library_ = nullptr; - }; } // namespace otlp diff --git a/exporters/otlp/src/otlp_log_recordable.cc b/exporters/otlp/src/otlp_log_recordable.cc index 92f12d7ef2..edc6f28623 100644 --- a/exporters/otlp/src/otlp_log_recordable.cc +++ b/exporters/otlp/src/otlp_log_recordable.cc @@ -206,6 +206,11 @@ void OtlpLogRecordable::SetInstrumentationLibrary( instrumentation_library_ = &instrumentation_library; } +const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary & +OtlpLogRecordable::GetInstrumentationLibrary() const noexcept +{ + return *instrumentation_library_; +} } // namespace otlp } // namespace exporter OPENTELEMETRY_END_NAMESPACE diff --git a/exporters/otlp/test/otlp_log_recordable_test.cc b/exporters/otlp/test/otlp_log_recordable_test.cc index 808d04fafe..b7b8acc293 100644 --- a/exporters/otlp/test/otlp_log_recordable_test.cc +++ b/exporters/otlp/test/otlp_log_recordable_test.cc @@ -188,6 +188,15 @@ TEST(OtlpLogRecordable, SetArrayAttribute) } } +TEST(OtlpLogRecordable, SetInstrumentationLibrary) +{ + OtlpLogRecordable rec; + auto inst_lib = + opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary::Create("test", "v1"); + rec.SetInstrumentationLibrary(*inst_lib); + EXPECT_EQ(rec.GetInstrumentationLibrary(), *inst_lib); +} + /** * AttributeValue can contain different int types, such as int, int64_t, * unsigned int, and uint64_t. To avoid writing test cases for each, we can diff --git a/sdk/include/opentelemetry/sdk/logs/logger.h b/sdk/include/opentelemetry/sdk/logs/logger.h index 7b5f36a774..3f505fb95a 100644 --- a/sdk/include/opentelemetry/sdk/logs/logger.h +++ b/sdk/include/opentelemetry/sdk/logs/logger.h @@ -61,6 +61,10 @@ class Logger final : public opentelemetry::logs::Logger opentelemetry::trace::TraceFlags trace_flags, opentelemetry::common::SystemTimestamp timestamp) noexcept override; + /** Returns the associated instruementation library */ + const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary & + GetInstrumentationLibrary() const noexcept; + private: // The name of this logger std::string logger_name_; diff --git a/sdk/src/logs/logger.cc b/sdk/src/logs/logger.cc index bd66c1e5e5..d1439f7f82 100644 --- a/sdk/src/logs/logger.cc +++ b/sdk/src/logs/logger.cc @@ -119,6 +119,12 @@ void Logger::Log(opentelemetry::logs::Severity severity, processor->OnReceive(std::move(recordable)); } +const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary & +Logger::GetInstrumentationLibrary() const noexcept +{ + return *instrumentation_library_; +} + } // namespace logs } // namespace sdk OPENTELEMETRY_END_NAMESPACE From 07753f78c67fdf6339301edc0dc88bd9b813e9f1 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Mon, 13 Dec 2021 19:36:14 +0000 Subject: [PATCH 05/15] logger_provider test --- sdk/src/logs/logger_provider.cc | 2 +- sdk/test/logs/logger_provider_sdk_test.cc | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 7dea6f8daf..032e8f7079 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -59,7 +59,7 @@ nostd::shared_ptr LoggerProvider::GetLogger( nostd::string_view schema_url) noexcept { // Currently, no args support - return GetLogger(name); + return GetLogger(name, "", schema_url); } std::shared_ptr LoggerProvider::GetProcessor() noexcept diff --git a/sdk/test/logs/logger_provider_sdk_test.cc b/sdk/test/logs/logger_provider_sdk_test.cc index 5c0be6fb94..d702636976 100644 --- a/sdk/test/logs/logger_provider_sdk_test.cc +++ b/sdk/test/logs/logger_provider_sdk_test.cc @@ -31,8 +31,9 @@ TEST(LoggerProviderSDK, LoggerProviderGetLoggerSimple) { auto lp = std::shared_ptr(new LoggerProvider()); - auto logger1 = lp->GetLogger("logger1"); - auto logger2 = lp->GetLogger("logger2"); + nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger1 = lp->GetLogger("logger1", "", schema_url); + auto logger2 = lp->GetLogger("logger2", "", schema_url); // Check that the logger is not nullptr ASSERT_NE(logger1, nullptr); @@ -51,14 +52,15 @@ TEST(LoggerProviderSDK, LoggerProviderLoggerArguments) // Currently, arguments are not supported by the loggers. // TODO: Once the logging spec defines what arguments are allowed, add more // detail to this test + nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.2.0"}; auto lp = std::shared_ptr(new LoggerProvider()); - auto logger1 = lp->GetLogger("logger1", ""); + auto logger1 = lp->GetLogger("logger1", "", schema_url); // Check GetLogger(logger_name, args) std::array sv{"string"}; nostd::span args{sv}; - auto logger2 = lp->GetLogger("logger2", args); + auto logger2 = lp->GetLogger("logger2", args, schema_url); } class DummyProcessor : public LogProcessor From 7899cdb622dea35edafecfde626cf12e523bd326 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Tue, 14 Dec 2021 17:20:02 +0000 Subject: [PATCH 06/15] provider_test update --- api/test/logs/provider_test.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc index 5adc1de1d4..2b34761d41 100755 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -62,14 +62,15 @@ TEST(Provider, GetLogger) { auto tf = shared_ptr(new TestProvider()); // tests GetLogger(name, options) - auto logger = tf->GetLogger("logger1"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = tf->GetLogger("logger1", "", schema_url); EXPECT_EQ(nullptr, logger); // tests GetLogger(name, arguments) std::array sv{"string"}; span args{sv}; - auto logger2 = tf->GetLogger("logger2", args); + auto logger2 = tf->GetLogger("logger2", args, schema_url); EXPECT_EQ(nullptr, logger2); } #endif From a74d784d2cf631cab5ab2333948cd20f66040b28 Mon Sep 17 00:00:00 2001 From: esigo Date: Thu, 16 Dec 2021 21:57:07 +0100 Subject: [PATCH 07/15] clean unused overload --- .../opentelemetry/logs/logger_provider.h | 10 +++------ api/include/opentelemetry/logs/noop.h | 13 +++--------- api/test/logs/logger_test.cc | 21 ------------------- api/test/logs/provider_test.cc | 16 +------------- .../opentelemetry/exporters/etw/etw_logger.h | 10 +-------- .../opentelemetry/sdk/logs/logger_provider.h | 17 ++------------- sdk/src/logs/logger_provider.cc | 13 ++---------- sdk/test/logs/logger_provider_sdk_test.cc | 16 -------------- 8 files changed, 12 insertions(+), 104 deletions(-) mode change 100755 => 100644 api/include/opentelemetry/logs/logger_provider.h mode change 100755 => 100644 api/include/opentelemetry/logs/noop.h mode change 100755 => 100644 exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h diff --git a/api/include/opentelemetry/logs/logger_provider.h b/api/include/opentelemetry/logs/logger_provider.h old mode 100755 new mode 100644 index 4ee3406309..786fb8567c --- a/api/include/opentelemetry/logs/logger_provider.h +++ b/api/include/opentelemetry/logs/logger_provider.h @@ -30,13 +30,9 @@ class LoggerProvider * */ - virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options = "", - nostd::string_view schema_url = "") = 0; - - virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view schema_url = "") = 0; + virtual nostd::shared_ptr GetLogger(nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") = 0; }; } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h old mode 100755 new mode 100644 index 188a680ce6..11a6cadd38 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -64,16 +64,9 @@ class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider nostd::shared_ptr(new opentelemetry::logs::NoopLogger)} {} - nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options, - nostd::string_view schema_url = "") override - { - return logger_; - } - - nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view schema_url = "") override + nostd::shared_ptr GetLogger(nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return logger_; } diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc index b58578a5bb..1a4138254a 100755 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -32,20 +32,6 @@ TEST(Logger, GetLoggerDefault) EXPECT_EQ(name, "noop logger"); } -// Test the two additional overloads for GetLogger() -TEST(Logger, GetNoopLoggerNameWithArgs) -{ - auto lp = Provider::GetLoggerProvider(); - - // GetLogger(name, list(args)) - std::array sv{"string"}; - span args{sv}; - lp->GetLogger("NoopLoggerWithArgs", args); - - // GetLogger(name, string options) - lp->GetLogger("NoopLoggerWithOptions", "options"); -} - // Test the Log() overloads TEST(Logger, LogMethodOverloads) { @@ -98,13 +84,6 @@ class TestProvider : public LoggerProvider { return shared_ptr(new TestLogger()); } - - shared_ptr GetLogger(string_view library_name, - span args, - nostd::string_view schema_url = "") override - { - return shared_ptr(new TestLogger()); - } }; TEST(Logger, PushLoggerImplementation) diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc index 2b34761d41..ab71b0d7b6 100755 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -26,13 +26,6 @@ class TestProvider : public LoggerProvider { return shared_ptr(nullptr); } - - shared_ptr GetLogger(string_view library_name, - span args, - string_view schema_url = "") override - { - return shared_ptr(nullptr); - } }; TEST(Provider, GetLoggerProviderDefault) @@ -61,16 +54,9 @@ TEST(Provider, MultipleLoggerProviders) TEST(Provider, GetLogger) { auto tf = shared_ptr(new TestProvider()); - // tests GetLogger(name, options) + // tests GetLogger(name, version, schema) const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; auto logger = tf->GetLogger("logger1", "", schema_url); EXPECT_EQ(nullptr, logger); - - // tests GetLogger(name, arguments) - - std::array sv{"string"}; - span args{sv}; - auto logger2 = tf->GetLogger("logger2", args, schema_url); - EXPECT_EQ(nullptr, logger2); } #endif diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h old mode 100755 new mode 100644 index 098a5c086e..56e8467f17 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -224,7 +224,7 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider */ nostd::shared_ptr GetLogger( nostd::string_view name, - nostd::string_view args = "", + nostd::string_view version = "", nostd::string_view schema_url = "") override { UNREFERENCED_PARAMETER(args); @@ -232,14 +232,6 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider return nostd::shared_ptr{new (std::nothrow) etw::Logger(*this, name, evtFmt)}; } - - nostd::shared_ptr GetLogger( - nostd::string_view name, - nostd::span args, - nostd::string_view schema_url = "") override - { - return GetLogger(name, args[0], schema_url); - } }; } // namespace etw diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h index 36a670912d..5a04111459 100755 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -42,26 +42,13 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, * Creates a logger with the given name, and returns a shared pointer to it. * If a logger with that name already exists, return a shared pointer to it * @param name The name of the logger to be created. - * @param options (OPTIONAL) The options for the logger. TODO: Once the logging spec defines it, - * give a list of options that the logger supports. + * @param version The version of the library. */ opentelemetry::nostd::shared_ptr GetLogger( opentelemetry::nostd::string_view name, - opentelemetry::nostd::string_view options = "", + opentelemetry::nostd::string_view version = "", nostd::string_view schema_url = "") noexcept override; - /** - * Creates a logger with the given name, and returns a shared pointer to it. - * If a logger with that name already exists, return a shared pointer to it - * @param name The name of the logger to be created. - * @param args (OPTIONAL) The arguments for the logger. TODO: Once the logging spec defines it, - * give a list of arguments that the logger supports. - */ - opentelemetry::nostd::shared_ptr GetLogger( - opentelemetry::nostd::string_view name, - nostd::span args, - nostd::string_view schema_url = "") noexcept override; - /** * Returns a shared pointer to the processor currently stored in the * logger provider. If no processor exists, returns a nullptr diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 032e8f7079..81519fabdd 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -18,7 +18,7 @@ LoggerProvider::LoggerProvider() noexcept : processor_{nullptr} {} nostd::shared_ptr LoggerProvider::GetLogger( nostd::string_view name, - nostd::string_view options, + nostd::string_view version, nostd::string_view schema_url) noexcept { // Ensure only one thread can read/write from the map of loggers @@ -46,22 +46,13 @@ nostd::shared_ptr LoggerProvider::GetLogger( // If no logger with that name exists yet, create it and add it to the map of loggers - auto lib = instrumentationlibrary::InstrumentationLibrary::Create(name, name, schema_url); + auto lib = instrumentationlibrary::InstrumentationLibrary::Create(name, version, schema_url); nostd::shared_ptr logger( new Logger(name, this->shared_from_this(), std::move(lib))); loggers_[name.data()] = logger; return logger; } -nostd::shared_ptr LoggerProvider::GetLogger( - nostd::string_view name, - nostd::span args, - nostd::string_view schema_url) noexcept -{ - // Currently, no args support - return GetLogger(name, "", schema_url); -} - std::shared_ptr LoggerProvider::GetProcessor() noexcept { return processor_.load(); diff --git a/sdk/test/logs/logger_provider_sdk_test.cc b/sdk/test/logs/logger_provider_sdk_test.cc index d702636976..a16ce11fca 100644 --- a/sdk/test/logs/logger_provider_sdk_test.cc +++ b/sdk/test/logs/logger_provider_sdk_test.cc @@ -47,22 +47,6 @@ TEST(LoggerProviderSDK, LoggerProviderGetLoggerSimple) ASSERT_EQ(logger1, logger3); } -TEST(LoggerProviderSDK, LoggerProviderLoggerArguments) -{ - // Currently, arguments are not supported by the loggers. - // TODO: Once the logging spec defines what arguments are allowed, add more - // detail to this test - nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto lp = std::shared_ptr(new LoggerProvider()); - - auto logger1 = lp->GetLogger("logger1", "", schema_url); - - // Check GetLogger(logger_name, args) - std::array sv{"string"}; - nostd::span args{sv}; - auto logger2 = lp->GetLogger("logger2", args, schema_url); -} - class DummyProcessor : public LogProcessor { std::unique_ptr MakeRecordable() noexcept From 8cb1a584d1a0433724a39a01bc377815f993c703 Mon Sep 17 00:00:00 2001 From: esigo Date: Thu, 16 Dec 2021 22:08:28 +0100 Subject: [PATCH 08/15] doc --- api/test/logs/logger_test.cc | 2 +- api/test/logs/provider_test.cc | 4 ++-- .../etw/include/opentelemetry/exporters/etw/etw_logger.h | 8 ++------ 3 files changed, 5 insertions(+), 9 deletions(-) mode change 100755 => 100644 api/test/logs/logger_test.cc mode change 100755 => 100644 api/test/logs/provider_test.cc diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc old mode 100755 new mode 100644 index 1a4138254a..25fc61e7a1 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -79,7 +79,7 @@ class TestLogger : public Logger class TestProvider : public LoggerProvider { shared_ptr GetLogger(string_view library_name, - string_view options = "", + string_view library_version = "", nostd::string_view schema_url = "") override { return shared_ptr(new TestLogger()); diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc old mode 100755 new mode 100644 index ab71b0d7b6..5c83072896 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -21,8 +21,8 @@ using opentelemetry::nostd::string_view; class TestProvider : public LoggerProvider { shared_ptr GetLogger(string_view library_name, - string_view options, - string_view schema_url = "") override + string_view library_version = "", + string_view schema_url = "") override { return shared_ptr(nullptr); } diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h index 56e8467f17..2f3a5af892 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -212,14 +212,10 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider } /** - * @brief Obtain ETW Tracer. + * @brief Obtain ETW Logger. * @param name ProviderId (instrumentation name) - Name or GUID * - * @param args Additional arguments that controls `codec` of the provider. - * Possible values are: - * - "ETW" - 'classic' Trace Logging Dynamic manifest ETW events. - * - "MSGPACK" - MessagePack-encoded binary payload ETW events. - * - "XML" - XML events (reserved for future use) + * @param version Library version * @return */ nostd::shared_ptr GetLogger( From 74bee1604f61d355448f72f15b59f1cb4675666c Mon Sep 17 00:00:00 2001 From: esigo Date: Fri, 17 Dec 2021 13:57:56 +0100 Subject: [PATCH 09/15] more tests --- api/test/logs/logger_test.cc | 8 +++++--- .../opentelemetry/exporters/etw/etw_logger.h | 5 +++-- exporters/etw/test/etw_logger_test.cc | 6 ++++-- .../opentelemetry/sdk/logs/recordable.h | 5 ----- sdk/test/logs/logger_provider_sdk_test.cc | 12 +++++++++++ sdk/test/logs/logger_sdk_test.cc | 20 ++++++++++++++----- 6 files changed, 39 insertions(+), 17 deletions(-) diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc index 25fc61e7a1..92a17d4119 100644 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -25,8 +25,9 @@ namespace trace = opentelemetry::trace; // Check that the default logger is a noop logger instance TEST(Logger, GetLoggerDefault) { - auto lp = Provider::GetLoggerProvider(); - auto logger = lp->GetLogger("TestLogger"); + auto lp = Provider::GetLoggerProvider(); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = lp->GetLogger("TestLogger", "", schema_url); auto name = logger->GetName(); EXPECT_NE(nullptr, logger); EXPECT_EQ(name, "noop logger"); @@ -95,7 +96,8 @@ TEST(Logger, PushLoggerImplementation) auto lp = Provider::GetLoggerProvider(); // Check that the implementation was pushed by calling TestLogger's GetName() - auto logger = lp->GetLogger("TestLogger"); + nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = lp->GetLogger("TestLogger", "", schema_url); ASSERT_EQ("test logger", logger->GetName()); } #endif diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h index 2f3a5af892..b847e8b85c 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -212,7 +212,7 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider } /** - * @brief Obtain ETW Logger. + * @brief Obtain ETW Tracer. * @param name ProviderId (instrumentation name) - Name or GUID * * @param version Library version @@ -223,7 +223,8 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider nostd::string_view version = "", nostd::string_view schema_url = "") override { - UNREFERENCED_PARAMETER(args); + UNREFERENCED_PARAMETER(version); + UNREFERENCED_PARAMETER(schema_url); ETWProvider::EventFormat evtFmt = config_.encoding; return nostd::shared_ptr{new (std::nothrow) etw::Logger(*this, name, evtFmt)}; diff --git a/exporters/etw/test/etw_logger_test.cc b/exporters/etw/test/etw_logger_test.cc index 419e4ad0da..e4cf53ee34 100644 --- a/exporters/etw/test/etw_logger_test.cc +++ b/exporters/etw/test/etw_logger_test.cc @@ -48,7 +48,8 @@ TEST(ETWLogger, LoggerCheckWithBody) std::string providerName = kGlobalProviderName; // supply unique instrumentation name here exporter::etw::LoggerProvider lp; - auto logger = lp.GetLogger(providerName); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = lp.GetLogger(providerName, "", schema_url); Properties attribs = {{"attrib1", 1}, {"attrib2", 2}}; EXPECT_NO_THROW( logger->Log(opentelemetry::logs::Severity::kDebug, "My Log", "This is test log body")); @@ -90,7 +91,8 @@ TEST(ETWLogger, LoggerCheckWithAttributes) std::string providerName = kGlobalProviderName; // supply unique instrumentation name here exporter::etw::LoggerProvider lp; - auto logger = lp.GetLogger(providerName); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = lp.GetLogger(providerName, "", schema_url); // Log attributes Properties attribs = {{"attrib1", 1}, {"attrib2", 2}}; EXPECT_NO_THROW(logger->Log(opentelemetry::logs::Severity::kDebug, "My Log", attribs)); diff --git a/sdk/include/opentelemetry/sdk/logs/recordable.h b/sdk/include/opentelemetry/sdk/logs/recordable.h index 89bb79da3e..d570d2aeee 100644 --- a/sdk/include/opentelemetry/sdk/logs/recordable.h +++ b/sdk/include/opentelemetry/sdk/logs/recordable.h @@ -19,7 +19,6 @@ # include "opentelemetry/version.h" # include -# include OPENTELEMETRY_BEGIN_NAMESPACE namespace sdk @@ -101,10 +100,6 @@ class Recordable virtual void SetInstrumentationLibrary( const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary &instrumentation_library) noexcept = 0; - -private: - const opentelemetry::sdk::instrumentationlibrary::InstrumentationLibrary - *instrumentation_library_ = nullptr; }; } // namespace logs } // namespace sdk diff --git a/sdk/test/logs/logger_provider_sdk_test.cc b/sdk/test/logs/logger_provider_sdk_test.cc index a16ce11fca..aec12ce690 100644 --- a/sdk/test/logs/logger_provider_sdk_test.cc +++ b/sdk/test/logs/logger_provider_sdk_test.cc @@ -39,12 +39,24 @@ TEST(LoggerProviderSDK, LoggerProviderGetLoggerSimple) ASSERT_NE(logger1, nullptr); ASSERT_NE(logger2, nullptr); + auto sdk_logger1 = static_cast(logger1.get()); + auto sdk_logger2 = static_cast(logger2.get()); + ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetName(), "logger1"); + ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetVersion(), ""); + ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetSchemaURL(), schema_url); + + ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetName(), "logger2"); + ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetVersion(), ""); + ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetSchemaURL(), schema_url); + // Check that two loggers with different names aren't the same instance ASSERT_NE(logger1, logger2); // Check that two loggers with the same name are the same instance auto logger3 = lp->GetLogger("logger1"); ASSERT_EQ(logger1, logger3); + auto sdk_logger3 = static_cast(logger3.get()); + ASSERT_EQ(sdk_logger3->GetInstrumentationLibrary(), sdk_logger1->GetInstrumentationLibrary()); } class DummyProcessor : public LogProcessor diff --git a/sdk/test/logs/logger_sdk_test.cc b/sdk/test/logs/logger_sdk_test.cc index 26632f1f91..0f95ad47f0 100644 --- a/sdk/test/logs/logger_sdk_test.cc +++ b/sdk/test/logs/logger_sdk_test.cc @@ -17,9 +17,14 @@ TEST(LoggerSDK, LogToNullProcessor) // even when there is no processor set // since it calls Processor::OnReceive() - auto lp = std::shared_ptr(new LoggerProvider()); - auto logger = lp->GetLogger("logger"); - + auto lp = std::shared_ptr(new LoggerProvider()); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = lp->GetLogger("logger", "", schema_url); + + auto sdk_logger = static_cast(logger.get()); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "logger"); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetVersion(), ""); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetSchemaURL(), schema_url); // Log a sample log record to a nullptr processor logger->Debug("Test log"); } @@ -66,15 +71,20 @@ TEST(LoggerSDK, LogToAProcessor) { // Create an API LoggerProvider and logger auto api_lp = std::shared_ptr(new LoggerProvider()); - auto logger = api_lp->GetLogger("logger"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = api_lp->GetLogger("logger", "", schema_url); // Cast the API LoggerProvider to an SDK Logger Provider and assert that it is still the same // LoggerProvider by checking that getting a logger with the same name as the previously defined // logger is the same instance auto lp = static_cast(api_lp.get()); - auto logger2 = lp->GetLogger("logger"); + auto logger2 = lp->GetLogger("logger", "", schema_url); ASSERT_EQ(logger, logger2); + auto sdk_logger = static_cast(logger.get()); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "logger"); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetVersion(), ""); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetSchemaURL(), schema_url); // Set a processor for the LoggerProvider auto shared_recordable = std::shared_ptr(new LogRecord()); auto processor = std::shared_ptr(new MockProcessor(shared_recordable)); From f58b702d481a0ceb47e9188b2210f4d704e63c56 Mon Sep 17 00:00:00 2001 From: esigo Date: Fri, 17 Dec 2021 14:01:17 +0100 Subject: [PATCH 10/15] changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e5f88f9c4..d761707db6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,6 +15,7 @@ Increment the: ## [Unreleased] +* [API/SDK] Logger: Support for Instrumentation library [#1128](https://github.com/open-telemetry/opentelemetry-cpp/pull/1128) * [EXPORTER] Bugfix: Jaeger exporter: extend supported attributes types ([#1106](https://github.com/open-telemetry/opentelemetry-cpp/pull/1106)) * [EXPORTER] Fix otlp generates null span ids ([#1106](https://github.com/open-telemetry/opentelemetry-cpp/pull/1106)) From 2847badcc421565b83ea4d905ed7e69a22f73c01 Mon Sep 17 00:00:00 2001 From: esigo Date: Fri, 17 Dec 2021 14:01:34 +0100 Subject: [PATCH 11/15] changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d761707db6..04157b40b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,7 +15,7 @@ Increment the: ## [Unreleased] -* [API/SDK] Logger: Support for Instrumentation library [#1128](https://github.com/open-telemetry/opentelemetry-cpp/pull/1128) +* [API/SDK] Logger: Support for Instrumentation library ([#1128](https://github.com/open-telemetry/opentelemetry-cpp/pull/1128)) * [EXPORTER] Bugfix: Jaeger exporter: extend supported attributes types ([#1106](https://github.com/open-telemetry/opentelemetry-cpp/pull/1106)) * [EXPORTER] Fix otlp generates null span ids ([#1106](https://github.com/open-telemetry/opentelemetry-cpp/pull/1106)) From f83cd717fc61c0cccc182125e55a1473a222249c Mon Sep 17 00:00:00 2001 From: esigo <32193773+E-Saei@users.noreply.github.com> Date: Fri, 17 Dec 2021 23:46:06 +0100 Subject: [PATCH 12/15] comments --- .../opentelemetry/logs/logger_provider.h | 10 ++++- api/include/opentelemetry/logs/noop.h | 16 ++++++-- api/test/logs/logger_test.cc | 39 ++++++++++++++++--- api/test/logs/provider_test.cc | 24 ++++++++---- .../opentelemetry/exporters/etw/etw_logger.h | 24 +++++++++++- .../opentelemetry/sdk/logs/logger_provider.h | 22 +++++++++-- sdk/src/logs/logger_provider.cc | 28 ++++++++----- sdk/test/logs/logger_provider_sdk_test.cc | 10 ++--- sdk/test/logs/logger_sdk_test.cc | 8 ++-- 9 files changed, 139 insertions(+), 42 deletions(-) diff --git a/api/include/opentelemetry/logs/logger_provider.h b/api/include/opentelemetry/logs/logger_provider.h index 786fb8567c..5f1795c8ea 100644 --- a/api/include/opentelemetry/logs/logger_provider.h +++ b/api/include/opentelemetry/logs/logger_provider.h @@ -30,7 +30,15 @@ class LoggerProvider * */ - virtual nostd::shared_ptr GetLogger(nostd::string_view library_name, + virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") = 0; + + virtual nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, nostd::string_view library_version = "", nostd::string_view schema_url = "") = 0; }; diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h index 11a6cadd38..78de25ddb0 100644 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -64,13 +64,23 @@ class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider nostd::shared_ptr(new opentelemetry::logs::NoopLogger)} {} - nostd::shared_ptr GetLogger(nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "")override { return logger_; } + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override + { + return logger_; + } private: nostd::shared_ptr logger_; }; diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc index 92a17d4119..f77febc277 100644 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -27,17 +27,33 @@ TEST(Logger, GetLoggerDefault) { auto lp = Provider::GetLoggerProvider(); const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = lp->GetLogger("TestLogger", "", schema_url); + auto logger = lp->GetLogger("TestLogger", "", "library_name", "", schema_url); auto name = logger->GetName(); EXPECT_NE(nullptr, logger); EXPECT_EQ(name, "noop logger"); } +// Test the two additional overloads for GetLogger() +TEST(Logger, GetNoopLoggerNameWithArgs) +{ + auto lp = Provider::GetLoggerProvider(); + + // GetLogger(name, list(args)) + std::array sv{"string"}; + span args{sv}; + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + lp->GetLogger("NoopLoggerWithArgs", args, "library_name", "", schema_url); + + // GetLogger(name, string options) + lp->GetLogger("NoopLoggerWithOptions", "options", "lib_name", "", schema_url); +} + // Test the Log() overloads TEST(Logger, LogMethodOverloads) { auto lp = Provider::GetLoggerProvider(); - auto logger = lp->GetLogger("TestLogger"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = lp->GetLogger("TestLogger", "", "library_name", "", schema_url); // Create a map to test the logs with std::map m = {{"key1", "value1"}}; @@ -79,9 +95,20 @@ class TestLogger : public Logger // Define a basic LoggerProvider class that returns an instance of the logger class defined above class TestProvider : public LoggerProvider { - shared_ptr GetLogger(string_view library_name, - string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override + { + return shared_ptr(new TestLogger()); + } + + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return shared_ptr(new TestLogger()); } @@ -97,7 +124,7 @@ TEST(Logger, PushLoggerImplementation) // Check that the implementation was pushed by calling TestLogger's GetName() nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = lp->GetLogger("TestLogger", "", schema_url); + auto logger = lp->GetLogger("TestLogger", "", "library_name", "", schema_url); ASSERT_EQ("test logger", logger->GetName()); } #endif diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc index 5c83072896..88e838bdcc 100644 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -8,21 +8,29 @@ # include "opentelemetry/logs/provider.h" # include "opentelemetry/nostd/shared_ptr.h" -# include "opentelemetry/nostd/span.h" -# include "opentelemetry/nostd/string_view.h" using opentelemetry::logs::Logger; using opentelemetry::logs::LoggerProvider; using opentelemetry::logs::Provider; using opentelemetry::nostd::shared_ptr; -using opentelemetry::nostd::span; -using opentelemetry::nostd::string_view; +namespace nostd = opentelemetry::nostd; class TestProvider : public LoggerProvider { - shared_ptr GetLogger(string_view library_name, - string_view library_version = "", - string_view schema_url = "") override + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override + { + return shared_ptr(nullptr); + } + + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return shared_ptr(nullptr); } @@ -56,7 +64,7 @@ TEST(Provider, GetLogger) auto tf = shared_ptr(new TestProvider()); // tests GetLogger(name, version, schema) const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = tf->GetLogger("logger1", "", schema_url); + auto logger = tf->GetLogger("logger1", "", "library_name", "", schema_url); EXPECT_EQ(nullptr, logger); } #endif diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h index b847e8b85c..8033309b33 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -219,15 +219,35 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider * @return */ nostd::shared_ptr GetLogger( - nostd::string_view name, + nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, nostd::string_view version = "", nostd::string_view schema_url = "") override { + UNREFERENCED_PARAMETER(options); + UNREFERENCED_PARAMETER(library_name); UNREFERENCED_PARAMETER(version); UNREFERENCED_PARAMETER(schema_url); ETWProvider::EventFormat evtFmt = config_.encoding; return nostd::shared_ptr{new (std::nothrow) - etw::Logger(*this, name, evtFmt)}; + etw::Logger(*this, logger_name, evtFmt)}; + } + + nostd::shared_ptr GetLogger( + nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view version = "", + nostd::string_view schema_url = "") override + { + UNREFERENCED_PARAMETER(args); + UNREFERENCED_PARAMETER(library_name); + UNREFERENCED_PARAMETER(version); + UNREFERENCED_PARAMETER(schema_url); + ETWProvider::EventFormat evtFmt = config_.encoding; + return nostd::shared_ptr{new (std::nothrow) + etw::Logger(*this, logger_name, evtFmt)}; } }; diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h index 5a04111459..e2eb8b9acd 100755 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -38,16 +38,30 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, */ explicit LoggerProvider() noexcept; + /** + * Creates a logger with the given name, and returns a shared pointer to it. + * If a logger with that name already exists, return a shared pointer to it + * @param logger_name The name of the logger to be created. + * @param options The version of the library. + * @param library_name The version of the library. + * @param version The version of the library. + */ + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") noexcept override; /** * Creates a logger with the given name, and returns a shared pointer to it. * If a logger with that name already exists, return a shared pointer to it * @param name The name of the logger to be created. * @param version The version of the library. */ - opentelemetry::nostd::shared_ptr GetLogger( - opentelemetry::nostd::string_view name, - opentelemetry::nostd::string_view version = "", - nostd::string_view schema_url = "") noexcept override; + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") noexcept override; /** * Returns a shared pointer to the processor currently stored in the diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 81519fabdd..3bf10fbcbd 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -16,16 +16,17 @@ namespace logs_api = opentelemetry::logs; LoggerProvider::LoggerProvider() noexcept : processor_{nullptr} {} -nostd::shared_ptr LoggerProvider::GetLogger( - nostd::string_view name, - nostd::string_view version, - nostd::string_view schema_url) noexcept + nostd::shared_ptr LoggerProvider::GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version, + nostd::string_view schema_url) noexcept { // Ensure only one thread can read/write from the map of loggers std::lock_guard lock_guard{mu_}; - // If a logger with a name "name" already exists, return it - auto loggerkv = loggers_.find(name.data()); + // If a logger with a name "logger_name" already exists, return it + auto loggerkv = loggers_.find(logger_name.data()); if (loggerkv != loggers_.end()) { return nostd::shared_ptr(loggerkv->second); @@ -46,13 +47,22 @@ nostd::shared_ptr LoggerProvider::GetLogger( // If no logger with that name exists yet, create it and add it to the map of loggers - auto lib = instrumentationlibrary::InstrumentationLibrary::Create(name, version, schema_url); + auto lib = instrumentationlibrary::InstrumentationLibrary::Create(library_name, library_version, schema_url); nostd::shared_ptr logger( - new Logger(name, this->shared_from_this(), std::move(lib))); - loggers_[name.data()] = logger; + new Logger(logger_name, this->shared_from_this(), std::move(lib))); + loggers_[logger_name.data()] = logger; return logger; } + nostd::shared_ptr LoggerProvider::GetLogger(nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version, + nostd::string_view schema_url) noexcept +{ + return GetLogger(logger_name, "", library_name, library_version, schema_url); +} + std::shared_ptr LoggerProvider::GetProcessor() noexcept { return processor_.load(); diff --git a/sdk/test/logs/logger_provider_sdk_test.cc b/sdk/test/logs/logger_provider_sdk_test.cc index aec12ce690..c01eb9b934 100644 --- a/sdk/test/logs/logger_provider_sdk_test.cc +++ b/sdk/test/logs/logger_provider_sdk_test.cc @@ -32,8 +32,8 @@ TEST(LoggerProviderSDK, LoggerProviderGetLoggerSimple) auto lp = std::shared_ptr(new LoggerProvider()); nostd::string_view schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger1 = lp->GetLogger("logger1", "", schema_url); - auto logger2 = lp->GetLogger("logger2", "", schema_url); + auto logger1 = lp->GetLogger("logger1", "", "lib_name", "", schema_url); + auto logger2 = lp->GetLogger("logger2", "", "lib_name", "", schema_url); // Check that the logger is not nullptr ASSERT_NE(logger1, nullptr); @@ -41,11 +41,11 @@ TEST(LoggerProviderSDK, LoggerProviderGetLoggerSimple) auto sdk_logger1 = static_cast(logger1.get()); auto sdk_logger2 = static_cast(logger2.get()); - ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetName(), "logger1"); + ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetName(), "lib_name"); ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetVersion(), ""); ASSERT_EQ(sdk_logger1->GetInstrumentationLibrary().GetSchemaURL(), schema_url); - ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetName(), "logger2"); + ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetName(), "lib_name"); ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetVersion(), ""); ASSERT_EQ(sdk_logger2->GetInstrumentationLibrary().GetSchemaURL(), schema_url); @@ -53,7 +53,7 @@ TEST(LoggerProviderSDK, LoggerProviderGetLoggerSimple) ASSERT_NE(logger1, logger2); // Check that two loggers with the same name are the same instance - auto logger3 = lp->GetLogger("logger1"); + auto logger3 = lp->GetLogger("logger1", "", "lib_name", "", schema_url); ASSERT_EQ(logger1, logger3); auto sdk_logger3 = static_cast(logger3.get()); ASSERT_EQ(sdk_logger3->GetInstrumentationLibrary(), sdk_logger1->GetInstrumentationLibrary()); diff --git a/sdk/test/logs/logger_sdk_test.cc b/sdk/test/logs/logger_sdk_test.cc index 0f95ad47f0..dc70458114 100644 --- a/sdk/test/logs/logger_sdk_test.cc +++ b/sdk/test/logs/logger_sdk_test.cc @@ -19,10 +19,10 @@ TEST(LoggerSDK, LogToNullProcessor) auto lp = std::shared_ptr(new LoggerProvider()); const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = lp->GetLogger("logger", "", schema_url); + auto logger = lp->GetLogger("logger", "", "lib_name", "", schema_url); auto sdk_logger = static_cast(logger.get()); - ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "logger"); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "lib_name"); ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetVersion(), ""); ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetSchemaURL(), schema_url); // Log a sample log record to a nullptr processor @@ -72,7 +72,7 @@ TEST(LoggerSDK, LogToAProcessor) // Create an API LoggerProvider and logger auto api_lp = std::shared_ptr(new LoggerProvider()); const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = api_lp->GetLogger("logger", "", schema_url); + auto logger = api_lp->GetLogger("logger", "", "lib_name", "", schema_url); // Cast the API LoggerProvider to an SDK Logger Provider and assert that it is still the same // LoggerProvider by checking that getting a logger with the same name as the previously defined @@ -82,7 +82,7 @@ TEST(LoggerSDK, LogToAProcessor) ASSERT_EQ(logger, logger2); auto sdk_logger = static_cast(logger.get()); - ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "logger"); + ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetName(), "lib_name"); ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetVersion(), ""); ASSERT_EQ(sdk_logger->GetInstrumentationLibrary().GetSchemaURL(), schema_url); // Set a processor for the LoggerProvider From 96d4d55884f57d0e860b25d246be14e389ec09bd Mon Sep 17 00:00:00 2001 From: esigo <32193773+E-Saei@users.noreply.github.com> Date: Sat, 18 Dec 2021 00:07:51 +0100 Subject: [PATCH 13/15] fix CI --- api/include/opentelemetry/logs/noop.h | 2 +- exporters/ostream/test/ostream_log_test.cc | 3 ++- exporters/otlp/test/otlp_http_log_exporter_test.cc | 6 ++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h index 78de25ddb0..9d17045a9d 100644 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -68,7 +68,7 @@ class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider nostd::string_view options, nostd::string_view library_name, nostd::string_view library_version = "", - nostd::string_view schema_url = "")override + nostd::string_view schema_url = "") override { return logger_; } diff --git a/exporters/ostream/test/ostream_log_test.cc b/exporters/ostream/test/ostream_log_test.cc index a21be32f29..e956ea6d37 100644 --- a/exporters/ostream/test/ostream_log_test.cc +++ b/exporters/ostream/test/ostream_log_test.cc @@ -249,7 +249,8 @@ TEST(OStreamLogExporter, IntegrationTest) auto apiProvider = nostd::shared_ptr(sdkProvider); auto provider = nostd::shared_ptr(apiProvider); logs_api::Provider::SetLoggerProvider(provider); - auto logger = logs_api::Provider::GetLoggerProvider()->GetLogger("Logger"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = logs_api::Provider::GetLoggerProvider()->GetLogger("Logger", "", "lib_name", "", schema_url); // Back up cout's streambuf std::streambuf *original = std::cout.rdbuf(); diff --git a/exporters/otlp/test/otlp_http_log_exporter_test.cc b/exporters/otlp/test/otlp_http_log_exporter_test.cc index 536636033e..7721f5dfbe 100755 --- a/exporters/otlp/test/otlp_http_log_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_log_exporter_test.cc @@ -223,7 +223,8 @@ TEST_F(OtlpHttpLogExporterTestPeer, ExportJsonIntegrationTest) char span_id_hex[2 * opentelemetry::trace::SpanId::kSize] = {0}; opentelemetry::trace::SpanId span_id{span_id_bin}; - auto logger = provider->GetLogger("test"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = provider->GetLogger("test", "", "lib_name", "", schema_url); logger->Log(opentelemetry::logs::Severity::kInfo, "Log name", "Log message", {{"service.name", "unit_test_service"}, {"tenant.id", "test_user"}, @@ -314,7 +315,8 @@ TEST_F(OtlpHttpLogExporterTestPeer, ExportBinaryIntegrationTest) '3', '2', '1', '0'}; opentelemetry::trace::SpanId span_id{span_id_bin}; - auto logger = provider->GetLogger("test"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = provider->GetLogger("test", "", "lib_name", "", schema_url); logger->Log(opentelemetry::logs::Severity::kInfo, "Log name", "Log message", {{"service.name", "unit_test_service"}, {"tenant.id", "test_user"}, From 700765978ad983d94e4793ad840c2797ad47f354 Mon Sep 17 00:00:00 2001 From: Oblivion Date: Sat, 18 Dec 2021 00:24:35 +0000 Subject: [PATCH 14/15] format --- api/include/opentelemetry/logs/noop.h | 19 +++++++------- api/test/logs/logger_test.cc | 18 ++++++------- api/test/logs/provider_test.cc | 18 ++++++------- .../common/logs_foo_library/foo_library.cc | 2 +- .../opentelemetry/exporters/etw/etw_logger.h | 8 +++--- exporters/ostream/test/ostream_log_test.cc | 3 ++- .../otlp/test/otlp_grpc_log_exporter_test.cc | 3 ++- .../otlp/test/otlp_http_log_exporter_test.cc | 4 +-- .../opentelemetry/sdk/logs/logger_provider.h | 22 ++++++++-------- sdk/src/logs/logger_provider.cc | 25 +++++++++++-------- 10 files changed, 65 insertions(+), 57 deletions(-) diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h index 9d17045a9d..6c5c24d671 100644 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -64,23 +64,24 @@ class NoopLoggerProvider final : public opentelemetry::logs::LoggerProvider nostd::shared_ptr(new opentelemetry::logs::NoopLogger)} {} - nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::shared_ptr GetLogger(nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return logger_; } nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return logger_; } + private: nostd::shared_ptr logger_; }; diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc index f77febc277..6809568e47 100644 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -51,7 +51,7 @@ TEST(Logger, GetNoopLoggerNameWithArgs) // Test the Log() overloads TEST(Logger, LogMethodOverloads) { - auto lp = Provider::GetLoggerProvider(); + auto lp = Provider::GetLoggerProvider(); const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; auto logger = lp->GetLogger("TestLogger", "", "library_name", "", schema_url); @@ -96,19 +96,19 @@ class TestLogger : public Logger class TestProvider : public LoggerProvider { nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return shared_ptr(new TestLogger()); } nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return shared_ptr(new TestLogger()); } diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc index 88e838bdcc..5c1095e3bb 100644 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -13,24 +13,24 @@ using opentelemetry::logs::Logger; using opentelemetry::logs::LoggerProvider; using opentelemetry::logs::Provider; using opentelemetry::nostd::shared_ptr; -namespace nostd = opentelemetry::nostd; +namespace nostd = opentelemetry::nostd; class TestProvider : public LoggerProvider { nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return shared_ptr(nullptr); } nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") override + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") override { return shared_ptr(nullptr); } diff --git a/examples/common/logs_foo_library/foo_library.cc b/examples/common/logs_foo_library/foo_library.cc index a5b8d9ae98..ebd3101b73 100644 --- a/examples/common/logs_foo_library/foo_library.cc +++ b/examples/common/logs_foo_library/foo_library.cc @@ -22,7 +22,7 @@ nostd::shared_ptr get_tracer() nostd::shared_ptr get_logger() { auto provider = logs::Provider::GetLoggerProvider(); - return provider->GetLogger("foo_library_logger"); + return provider->GetLogger("foo_library_logger", "", "foo_library"); } } // namespace diff --git a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h index 8033309b33..0237362d08 100644 --- a/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h +++ b/exporters/etw/include/opentelemetry/exporters/etw/etw_logger.h @@ -230,8 +230,8 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider UNREFERENCED_PARAMETER(version); UNREFERENCED_PARAMETER(schema_url); ETWProvider::EventFormat evtFmt = config_.encoding; - return nostd::shared_ptr{new (std::nothrow) - etw::Logger(*this, logger_name, evtFmt)}; + return nostd::shared_ptr{ + new (std::nothrow) etw::Logger(*this, logger_name, evtFmt)}; } nostd::shared_ptr GetLogger( @@ -246,8 +246,8 @@ class LoggerProvider : public opentelemetry::logs::LoggerProvider UNREFERENCED_PARAMETER(version); UNREFERENCED_PARAMETER(schema_url); ETWProvider::EventFormat evtFmt = config_.encoding; - return nostd::shared_ptr{new (std::nothrow) - etw::Logger(*this, logger_name, evtFmt)}; + return nostd::shared_ptr{ + new (std::nothrow) etw::Logger(*this, logger_name, evtFmt)}; } }; diff --git a/exporters/ostream/test/ostream_log_test.cc b/exporters/ostream/test/ostream_log_test.cc index e956ea6d37..c53d233c0b 100644 --- a/exporters/ostream/test/ostream_log_test.cc +++ b/exporters/ostream/test/ostream_log_test.cc @@ -250,7 +250,8 @@ TEST(OStreamLogExporter, IntegrationTest) auto provider = nostd::shared_ptr(apiProvider); logs_api::Provider::SetLoggerProvider(provider); const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; - auto logger = logs_api::Provider::GetLoggerProvider()->GetLogger("Logger", "", "lib_name", "", schema_url); + auto logger = + logs_api::Provider::GetLoggerProvider()->GetLogger("Logger", "", "lib_name", "", schema_url); // Back up cout's streambuf std::streambuf *original = std::cout.rdbuf(); diff --git a/exporters/otlp/test/otlp_grpc_log_exporter_test.cc b/exporters/otlp/test/otlp_grpc_log_exporter_test.cc index 0f28e46c24..feb97f3b65 100644 --- a/exporters/otlp/test/otlp_grpc_log_exporter_test.cc +++ b/exporters/otlp/test/otlp_grpc_log_exporter_test.cc @@ -137,7 +137,8 @@ TEST_F(OtlpGrpcLogExporterTestPeer, ExportIntegrationTest) '3', '2', '1', '0'}; opentelemetry::trace::SpanId span_id{span_id_bin}; - auto logger = provider->GetLogger("test"); + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + auto logger = provider->GetLogger("test", "", "lib_name", "", schema_url); logger->Log(opentelemetry::logs::Severity::kInfo, "Log name", "Log message", {{"service.name", "unit_test_service"}, {"tenant.id", "test_user"}, diff --git a/exporters/otlp/test/otlp_http_log_exporter_test.cc b/exporters/otlp/test/otlp_http_log_exporter_test.cc index 7721f5dfbe..7996b7c06f 100755 --- a/exporters/otlp/test/otlp_http_log_exporter_test.cc +++ b/exporters/otlp/test/otlp_http_log_exporter_test.cc @@ -223,7 +223,7 @@ TEST_F(OtlpHttpLogExporterTestPeer, ExportJsonIntegrationTest) char span_id_hex[2 * opentelemetry::trace::SpanId::kSize] = {0}; opentelemetry::trace::SpanId span_id{span_id_bin}; - const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; auto logger = provider->GetLogger("test", "", "lib_name", "", schema_url); logger->Log(opentelemetry::logs::Severity::kInfo, "Log name", "Log message", {{"service.name", "unit_test_service"}, @@ -315,7 +315,7 @@ TEST_F(OtlpHttpLogExporterTestPeer, ExportBinaryIntegrationTest) '3', '2', '1', '0'}; opentelemetry::trace::SpanId span_id{span_id_bin}; - const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; + const std::string schema_url{"https://opentelemetry.io/schemas/1.2.0"}; auto logger = provider->GetLogger("test", "", "lib_name", "", schema_url); logger->Log(opentelemetry::logs::Severity::kInfo, "Log name", "Log message", {{"service.name", "unit_test_service"}, diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h index e2eb8b9acd..a7a5d5411c 100755 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -46,22 +46,24 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, * @param library_name The version of the library. * @param version The version of the library. */ - nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::string_view options, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") noexcept override; + nostd::shared_ptr GetLogger( + nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") noexcept override; /** * Creates a logger with the given name, and returns a shared pointer to it. * If a logger with that name already exists, return a shared pointer to it * @param name The name of the logger to be created. * @param version The version of the library. */ - nostd::shared_ptr GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view library_name, - nostd::string_view library_version = "", - nostd::string_view schema_url = "") noexcept override; + nostd::shared_ptr GetLogger( + nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version = "", + nostd::string_view schema_url = "") noexcept override; /** * Returns a shared pointer to the processor currently stored in the diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 3bf10fbcbd..56e63625d3 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -16,11 +16,12 @@ namespace logs_api = opentelemetry::logs; LoggerProvider::LoggerProvider() noexcept : processor_{nullptr} {} - nostd::shared_ptr LoggerProvider::GetLogger(nostd::string_view logger_name, - nostd::string_view options, - nostd::string_view library_name, - nostd::string_view library_version, - nostd::string_view schema_url) noexcept +nostd::shared_ptr LoggerProvider::GetLogger( + nostd::string_view logger_name, + nostd::string_view options, + nostd::string_view library_name, + nostd::string_view library_version, + nostd::string_view schema_url) noexcept { // Ensure only one thread can read/write from the map of loggers std::lock_guard lock_guard{mu_}; @@ -47,18 +48,20 @@ LoggerProvider::LoggerProvider() noexcept : processor_{nullptr} {} // If no logger with that name exists yet, create it and add it to the map of loggers - auto lib = instrumentationlibrary::InstrumentationLibrary::Create(library_name, library_version, schema_url); + auto lib = instrumentationlibrary::InstrumentationLibrary::Create(library_name, library_version, + schema_url); nostd::shared_ptr logger( new Logger(logger_name, this->shared_from_this(), std::move(lib))); loggers_[logger_name.data()] = logger; return logger; } - nostd::shared_ptr LoggerProvider::GetLogger(nostd::string_view logger_name, - nostd::span args, - nostd::string_view library_name, - nostd::string_view library_version, - nostd::string_view schema_url) noexcept +nostd::shared_ptr LoggerProvider::GetLogger( + nostd::string_view logger_name, + nostd::span args, + nostd::string_view library_name, + nostd::string_view library_version, + nostd::string_view schema_url) noexcept { return GetLogger(logger_name, "", library_name, library_version, schema_url); } From 0e4df671f6427f92532ff857a608a8aebaa61fa4 Mon Sep 17 00:00:00 2001 From: esigo <32193773+E-Saei@users.noreply.github.com> Date: Sat, 18 Dec 2021 10:32:49 +0100 Subject: [PATCH 15/15] loggers vector --- .../opentelemetry/sdk/logs/logger_provider.h | 4 +--- sdk/src/logs/logger_provider.cc | 16 +++++++++------- sdk/test/logs/logger_sdk_test.cc | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/sdk/include/opentelemetry/sdk/logs/logger_provider.h b/sdk/include/opentelemetry/sdk/logs/logger_provider.h index a7a5d5411c..c983d0c7ce 100755 --- a/sdk/include/opentelemetry/sdk/logs/logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/logger_provider.h @@ -7,7 +7,6 @@ # include # include # include -# include # include # include "opentelemetry/logs/logger_provider.h" @@ -84,8 +83,7 @@ class LoggerProvider final : public opentelemetry::logs::LoggerProvider, opentelemetry::sdk::common::AtomicSharedPtr processor_; // A vector of pointers to all the loggers that have been created - std::unordered_map> - loggers_; + std::vector> loggers_; // A mutex that ensures only one thread is using the map of loggers std::mutex mu_; diff --git a/sdk/src/logs/logger_provider.cc b/sdk/src/logs/logger_provider.cc index 56e63625d3..061a1b849d 100644 --- a/sdk/src/logs/logger_provider.cc +++ b/sdk/src/logs/logger_provider.cc @@ -27,10 +27,13 @@ nostd::shared_ptr LoggerProvider::GetLogger( std::lock_guard lock_guard{mu_}; // If a logger with a name "logger_name" already exists, return it - auto loggerkv = loggers_.find(logger_name.data()); - if (loggerkv != loggers_.end()) + for (auto &logger : loggers_) { - return nostd::shared_ptr(loggerkv->second); + auto& logger_lib = logger->GetInstrumentationLibrary(); + if (logger->GetName() == logger_name && logger_lib.equal(library_name, library_version, schema_url)) + { + return nostd::shared_ptr{logger}; + } } // Check if creating a new logger would exceed the max number of loggers @@ -50,10 +53,9 @@ nostd::shared_ptr LoggerProvider::GetLogger( auto lib = instrumentationlibrary::InstrumentationLibrary::Create(library_name, library_version, schema_url); - nostd::shared_ptr logger( - new Logger(logger_name, this->shared_from_this(), std::move(lib))); - loggers_[logger_name.data()] = logger; - return logger; + loggers_.push_back(std::shared_ptr( + new Logger(logger_name, this->shared_from_this(), std::move(lib)))); + return nostd::shared_ptr{loggers_.back()}; } nostd::shared_ptr LoggerProvider::GetLogger( diff --git a/sdk/test/logs/logger_sdk_test.cc b/sdk/test/logs/logger_sdk_test.cc index dc70458114..b754b30bed 100644 --- a/sdk/test/logs/logger_sdk_test.cc +++ b/sdk/test/logs/logger_sdk_test.cc @@ -78,7 +78,7 @@ TEST(LoggerSDK, LogToAProcessor) // LoggerProvider by checking that getting a logger with the same name as the previously defined // logger is the same instance auto lp = static_cast(api_lp.get()); - auto logger2 = lp->GetLogger("logger", "", schema_url); + auto logger2 = lp->GetLogger("logger", "", "lib_name", "", schema_url); ASSERT_EQ(logger, logger2); auto sdk_logger = static_cast(logger.get());