diff --git a/CHANGELOG.md b/CHANGELOG.md index bfe4603421..eb407ac96a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,18 @@ Increment the: * [SEMANTIC CONVENTIONS] Upgrade to semantic conventions 1.40.0 [#3881](https://github.com/open-telemetry/opentelemetry-cpp/pull/3881) +* [BUILD] Revisit EventLogger deprecation + [#3855](https://github.com/open-telemetry/opentelemetry-cpp/pull/3855) + +Important changes: + +* [BUILD] Revisit EventLogger deprecation + [#3855](https://github.com/open-telemetry/opentelemetry-cpp/pull/3855) + + * File `DEPRECATED.md` contains information about current deprecation + plans. + * Please adjust your application accordingly, to avoid disruption. + ## [1.25 2026-02-07] * [RELEASE] Bump main branch to 1.25.0-dev (#3759) diff --git a/CMakeLists.txt b/CMakeLists.txt index 48046d1b38..1768dace7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -432,14 +432,16 @@ if(OTELCPP_MAINTAINER_MODE) add_compile_options(/WX) add_compile_options(/W4) - # Relaxed warnings + # Relaxed warnings (ignored) add_compile_options(/wd4100) add_compile_options(/wd4125) add_compile_options(/wd4566) add_compile_options(/wd4127) add_compile_options(/wd4512) add_compile_options(/wd4267) - add_compile_options(/wd4996) + + # Relaxed warnings (still reported as warnings, not errors) + add_compile_options(/w34996) # 'xxx' was declared deprecated # Enforced warnings add_compile_options(/we4265) # 'class': class has virtual functions, but diff --git a/DEPRECATED.md b/DEPRECATED.md index 399d441b3e..1eee40fda5 100644 --- a/DEPRECATED.md +++ b/DEPRECATED.md @@ -46,7 +46,87 @@ N/A ## [opentelemetry-cpp API] -N/A +### Deprecation of EventLogger + +#### Announcement (EventLogger) + +The `EventLogger` API was deprecated by: + +* [API] Deprecate event logger + [#3285](https://github.com/open-telemetry/opentelemetry-cpp/pull/3285) + +on Feb 25, 2025, as published in release 1.20. + +#### Motivation (EventLogger) + +The specification for `EventLogger` was deprecated by: + +* Deprecate Event API and SDK in favor of Emit Event in the Log API + [#4319](https://github.com/open-telemetry/opentelemetry-specification/pull/4319) + +The opentelemetry-cpp API and SDK deprecates the EventLogger to be aligned +with the opentelemetry specification. + +#### Scope (EventLogger) + +The following classes or methods are deprecated in ABI version 1: + +* API + * class opentelemetry::logs::EventLogger + * class opentelemetry::logs::EventLoggerProvider + * class opentelemetry::logs::NoopEventLogger + * class opentelemetry::logs::NoopEventLoggerProvider + * method opentelemetry::logs::Provider::GetEventLoggerProvider() + * method opentelemetry::logs::Provider::SetEventLoggerProvider() +* SDK + * class opentelemetry::sdk::logs::EventLogger + * class opentelemetry::sdk::logs::EventLoggerProvider + * class opentelemetry::sdk::logs::EventLoggerProviderFactory + +The same are removed from ABI version 2. + +#### Mitigation (EventLogger) + +In respective order, the following should be used in place of `EventLogger`: + +* API + * class opentelemetry::logs::Logger + * class opentelemetry::logs::LoggerProvider + * class opentelemetry::logs::NoopLogger + * class opentelemetry::logs::NoopLoggerProvider + * method opentelemetry::logs::Provider::GetLoggerProvider() + * method opentelemetry::logs::Provider::SetLoggerProvider() +* SDK + * class opentelemetry::sdk::logs::Logger + * class opentelemetry::sdk::logs::LoggerProvider + * class opentelemetry::sdk::logs::LoggerProviderFactory + +Instrumented applications, that currently use +`opentelemetry::logs::Provider::GetEventLoggerProvider()`, +are strongly encouraged to migrate and use +`opentelemetry::logs::Provider::GetLoggerProvider()` instead. + +Main applications, when installing and configuring an SDK, that currently use +`opentelemetry::logs::Provider::SetEventLoggerProvider()`, +are strongly encouraged to migrate and use +`opentelemetry::logs::Provider::SetLoggerProvider()` instead. + +This migration can be implemented now, +as `Logger` is available already in ABI version 1. + +This migration is mandatory and a pre requisite for adoption of ABI version 2 later. + +#### Planned removal (EventLogger) + +All the deprecated code is already removed from ABI version 2, since Feb +2025. + +While EventLogger will not be removed from ABI version 1, +the ABI version 1 itself will be deprecated and decommissioned in the long +term, after ABI version 2 is declared stable. + +By the time only ABI version 2 is available and supported, +any code still using the deprecated `EventLogger` will break. ## [opentelemetry-cpp SDK] diff --git a/api/include/opentelemetry/logs/event_logger.h b/api/include/opentelemetry/logs/event_logger.h index dbeffd2042..3c780938cd 100644 --- a/api/include/opentelemetry/logs/event_logger.h +++ b/api/include/opentelemetry/logs/event_logger.h @@ -15,21 +15,11 @@ OPENTELEMETRY_BEGIN_NAMESPACE namespace logs { #if OPENTELEMETRY_ABI_VERSION_NO < 2 -# if defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 4996) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif - /** * Handles event log record creation. + * @deprecated **/ -class OPENTELEMETRY_DEPRECATED EventLogger +class EventLogger { public: virtual ~EventLogger() = default; @@ -88,14 +78,6 @@ class OPENTELEMETRY_DEPRECATED EventLogger void IgnoreTraitResult(ValueType &&...) {} }; - -# if defined(_MSC_VER) -# pragma warning(pop) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic pop -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic pop -# endif #endif } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/logs/event_logger_provider.h b/api/include/opentelemetry/logs/event_logger_provider.h index cb3b05dc72..51053150e5 100644 --- a/api/include/opentelemetry/logs/event_logger_provider.h +++ b/api/include/opentelemetry/logs/event_logger_provider.h @@ -15,21 +15,11 @@ class EventLogger; class Logger; #if OPENTELEMETRY_ABI_VERSION_NO < 2 -# if defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 4996) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif - /** * Creates new EventLogger instances. + * @deprecated */ -class OPENTELEMETRY_DEPRECATED EventLoggerProvider +class EventLoggerProvider { public: virtual ~EventLoggerProvider() = default; @@ -43,14 +33,6 @@ class OPENTELEMETRY_DEPRECATED EventLoggerProvider nostd::shared_ptr delegate_logger, nostd::string_view event_domain) noexcept = 0; }; - -# if defined(_MSC_VER) -# pragma warning(pop) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic pop -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic pop -# endif #endif } // namespace logs OPENTELEMETRY_END_NAMESPACE diff --git a/api/include/opentelemetry/logs/noop.h b/api/include/opentelemetry/logs/noop.h index 73bf1e57f9..fe0e2b44a9 100644 --- a/api/include/opentelemetry/logs/noop.h +++ b/api/include/opentelemetry/logs/noop.h @@ -91,17 +91,10 @@ class NoopLoggerProvider final : public LoggerProvider }; #if OPENTELEMETRY_ABI_VERSION_NO < 2 -# if defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 4996) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif - +/** + * No-op implementation of a EventLogger. + * @deprecated + */ class NoopEventLogger final : public EventLogger { public: @@ -120,6 +113,7 @@ class NoopEventLogger final : public EventLogger /** * No-op implementation of a EventLoggerProvider. + * @deprecated */ class NoopEventLoggerProvider final : public EventLoggerProvider { @@ -138,14 +132,6 @@ class NoopEventLoggerProvider final : public EventLoggerProvider private: nostd::shared_ptr event_logger_; }; - -# if defined(_MSC_VER) -# pragma warning(pop) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic pop -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic pop -# endif #endif } // namespace logs diff --git a/api/include/opentelemetry/logs/provider.h b/api/include/opentelemetry/logs/provider.h index 83d2e765de..c310e0affc 100644 --- a/api/include/opentelemetry/logs/provider.h +++ b/api/include/opentelemetry/logs/provider.h @@ -48,21 +48,12 @@ class OPENTELEMETRY_EXPORT Provider } #if OPENTELEMETRY_ABI_VERSION_NO < 2 -# if defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 4996) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif /** * Returns the singleton EventLoggerProvider. * * By default, a no-op EventLoggerProvider is returned. This will never return a * nullptr EventLoggerProvider. + * @deprecated */ OPENTELEMETRY_DEPRECATED static nostd::shared_ptr GetEventLoggerProvider() noexcept @@ -73,6 +64,7 @@ class OPENTELEMETRY_EXPORT Provider /** * Changes the singleton EventLoggerProvider. + * @deprecated */ OPENTELEMETRY_DEPRECATED static void SetEventLoggerProvider( const nostd::shared_ptr &tp) noexcept @@ -80,13 +72,6 @@ class OPENTELEMETRY_EXPORT Provider std::lock_guard guard(GetLock()); GetEventProvider() = tp; } -# if defined(_MSC_VER) -# pragma warning(pop) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic pop -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic pop -# endif #endif private: @@ -97,32 +82,12 @@ class OPENTELEMETRY_EXPORT Provider } #if OPENTELEMETRY_ABI_VERSION_NO < 2 -# if defined(_MSC_VER) -# pragma warning(push) -# pragma warning(disable : 4996) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wdeprecated-declarations" -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wdeprecated-declarations" -# endif - - OPENTELEMETRY_DEPRECATED OPENTELEMETRY_API_SINGLETON static nostd::shared_ptr & GetEventProvider() noexcept { static nostd::shared_ptr provider(new NoopEventLoggerProvider); return provider; } - -# if defined(_MSC_VER) -# pragma warning(pop) -# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) -# pragma GCC diagnostic pop -# elif defined(__clang__) || defined(__apple_build_version__) -# pragma clang diagnostic pop -# endif #endif OPENTELEMETRY_API_SINGLETON static common::SpinLockMutex &GetLock() noexcept diff --git a/api/test/logs/logger_test.cc b/api/test/logs/logger_test.cc index ee4514dda9..e4dfac1fd1 100644 --- a/api/test/logs/logger_test.cc +++ b/api/test/logs/logger_test.cc @@ -161,6 +161,23 @@ TEST(Logger, LogMethodOverloads) } #if OPENTELEMETRY_ABI_VERSION_NO < 2 + +/* + * opentelemetry::logs::Provider::GetLoggerProvider() is deprecated. + * Suppress warnings in tests, to have a clean build and coverage. + */ + +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif + TEST(Logger, EventLogMethodOverloads) { auto lp = Provider::GetLoggerProvider(); @@ -192,6 +209,15 @@ TEST(Logger, EventLogMethodOverloads) event_logger->EmitEvent("event name", Severity::kDebug, opentelemetry::common::MakeAttributes(vec)); } + +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif + #endif // Define a basic Logger class diff --git a/api/test/logs/provider_test.cc b/api/test/logs/provider_test.cc index 33f77279ad..0ed785acf7 100644 --- a/api/test/logs/provider_test.cc +++ b/api/test/logs/provider_test.cc @@ -74,6 +74,24 @@ TEST(Provider, GetLogger) } #if OPENTELEMETRY_ABI_VERSION_NO < 2 + +/* + * opentelemetry::logs::Provider::GetEventLoggerProvider() is deprecated. + * opentelemetry::logs::Provider::SetEventLoggerProvider() is deprecated. + * Suppress warnings in tests, to have a clean build and coverage. + */ + +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif + class TestEventLoggerProvider : public EventLoggerProvider { public: @@ -115,4 +133,13 @@ TEST(Provider, CreateEventLogger) EXPECT_EQ(nullptr, logger); } + +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif + #endif diff --git a/examples/common/logs_foo_library/CMakeLists.txt b/examples/common/logs_foo_library/CMakeLists.txt index 14b0209bd5..b1173098fd 100644 --- a/examples/common/logs_foo_library/CMakeLists.txt +++ b/examples/common/logs_foo_library/CMakeLists.txt @@ -12,24 +12,3 @@ target_include_directories(common_logs_foo_library PUBLIC $) target_link_libraries(common_logs_foo_library PUBLIC opentelemetry-cpp::api) - -# Internal deprecated API calling should not failed the build in maintainer mode -if(OTELCPP_MAINTAINER_MODE) - if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang") - get_target_property(COMMON_LOGS_FOO_COMPILE_OPTS common_logs_foo_library - COMPILE_OPTIONS) - list(REMOVE_ITEM COMMON_LOGS_FOO_COMPILE_OPTS - -Wno-error=deprecated-declarations) - set_target_properties( - common_logs_foo_library PROPERTIES COMPILE_OPTIONS - "${COMMON_LOGS_FOO_COMPILE_OPTS}") - elseif(CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - get_target_property(COMMON_LOGS_FOO_COMPILE_OPTS common_logs_foo_library - COMPILE_OPTIONS) - list(REMOVE_ITEM COMMON_LOGS_FOO_COMPILE_OPTS /wd4996) - list(APPEND COMMON_LOGS_FOO_COMPILE_OPTS /w34996) - set_target_properties( - common_logs_foo_library PROPERTIES COMPILE_OPTIONS - "${COMMON_LOGS_FOO_COMPILE_OPTS}") - endif() -endif() diff --git a/examples/common/metrics_foo_library/foo_library.cc b/examples/common/metrics_foo_library/foo_library.cc index 63ce796e28..8e0e1b42dc 100644 --- a/examples/common/metrics_foo_library/foo_library.cc +++ b/examples/common/metrics_foo_library/foo_library.cc @@ -23,8 +23,8 @@ #include "opentelemetry/nostd/string_view.h" #include "opentelemetry/nostd/variant.h" #include "opentelemetry/semconv/http_metrics.h" -#include "opentelemetry/semconv/incubating/container_metrics.h" -#include "opentelemetry/semconv/incubating/system_metrics.h" +#include "opentelemetry/semconv/container_metrics.h" +#include "opentelemetry/semconv/system_metrics.h" namespace metrics_api = opentelemetry::metrics; diff --git a/sdk/include/opentelemetry/sdk/logs/event_logger.h b/sdk/include/opentelemetry/sdk/logs/event_logger.h index dcb93cb2d4..fa66addc41 100644 --- a/sdk/include/opentelemetry/sdk/logs/event_logger.h +++ b/sdk/include/opentelemetry/sdk/logs/event_logger.h @@ -19,7 +19,11 @@ namespace sdk namespace logs { #if OPENTELEMETRY_ABI_VERSION_NO < 2 -class OPENTELEMETRY_DEPRECATED EventLogger final : public opentelemetry::logs::EventLogger +/** + * Sdk implementation of EventLogger. + * @deprecated + */ +class EventLogger final : public opentelemetry::logs::EventLogger { public: /** diff --git a/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h b/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h index 6c7fafab54..8bdf533986 100644 --- a/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h +++ b/sdk/include/opentelemetry/sdk/logs/event_logger_provider.h @@ -23,7 +23,11 @@ namespace sdk namespace logs { #if OPENTELEMETRY_ABI_VERSION_NO < 2 -class OPENTELEMETRY_EXPORT OPENTELEMETRY_DEPRECATED EventLoggerProvider final +/** + * Sdk implementation of EventLoggerProvider. + * @deprecated + */ +class OPENTELEMETRY_EXPORT EventLoggerProvider final : public opentelemetry::logs::EventLoggerProvider { public: diff --git a/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h b/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h index febc772f12..4320bb5de3 100644 --- a/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h +++ b/sdk/include/opentelemetry/sdk/logs/event_logger_provider_factory.h @@ -20,6 +20,7 @@ namespace logs #if OPENTELEMETRY_ABI_VERSION_NO < 2 /** * Factory class for EventLoggerProvider. + * @deprecated */ class OPENTELEMETRY_DEPRECATED EventLoggerProviderFactory { @@ -28,8 +29,7 @@ class OPENTELEMETRY_DEPRECATED EventLoggerProviderFactory * Create a EventLoggerProvider. */ - OPENTELEMETRY_DEPRECATED static std::unique_ptr - Create(); + static std::unique_ptr Create(); }; #endif diff --git a/sdk/test/logs/logger_provider_sdk_test.cc b/sdk/test/logs/logger_provider_sdk_test.cc index 8b649e38f7..571b8fe3b6 100644 --- a/sdk/test/logs/logger_provider_sdk_test.cc +++ b/sdk/test/logs/logger_provider_sdk_test.cc @@ -119,6 +119,23 @@ TEST(LoggerProviderSDK, LoggerProviderLoggerArguments) } #if OPENTELEMETRY_ABI_VERSION_NO < 2 + +/* + * opentelemetry::sdk::logs::EventLoggerProviderFactory is deprecated. + * Suppress warnings in tests, to have a clean build and coverage. + */ + +# if defined(_MSC_VER) +# pragma warning(push) +# pragma warning(disable : 4996) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wdeprecated-declarations" +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wdeprecated-declarations" +# endif + TEST(LoggerProviderSDK, EventLoggerProviderFactory) { auto elp = opentelemetry::sdk::logs::EventLoggerProviderFactory::Create(); @@ -129,6 +146,15 @@ TEST(LoggerProviderSDK, EventLoggerProviderFactory) auto event_logger = elp->CreateEventLogger(logger1, "otel-cpp.test"); } + +# if defined(_MSC_VER) +# pragma warning(pop) +# elif defined(__GNUC__) && !defined(__clang__) && !defined(__apple_build_version__) +# pragma GCC diagnostic pop +# elif defined(__clang__) || defined(__apple_build_version__) +# pragma clang diagnostic pop +# endif + #endif TEST(LoggerProviderSDK, LoggerEqualityCheck)