Skip to content

Commit a3e3a90

Browse files
authored
Fix GlobalLogHandler singleton creation order (#1767)
1 parent 389b84f commit a3e3a90

File tree

4 files changed

+13
-7
lines changed

4 files changed

+13
-7
lines changed

sdk/include/opentelemetry/sdk/common/global_log_handler.h

+4-5
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,10 @@ class GlobalLogHandler
134134
OPENTELEMETRY_END_NAMESPACE
135135

136136
/**
137-
* We can not decide the destroying order of signaltons.
138-
* Which means, the destructors of other singletons (GlobalLogHandler,TracerProvider and etc.)
139-
* may be called after destroying of global LogHandler and use OTEL_INTERNAL_LOG_* in it.We can do
140-
* nothing but ignore the log in this situation.
141-
*/
137+
* GlobalLogHandler and TracerProvider/MeterProvider/LoggerProvider are lazy sigletons.
138+
* To ensure that GlobalLogHandler is the first one to be initialized (and so last to be
139+
* destroyed), it is first used inside the constructors of TraceProvider, MeterProvider
140+
* and LoggerProvider for debug logging. */
142141
#define OTEL_INTERNAL_LOG_DISPATCH(level, message, attributes) \
143142
do \
144143
{ \

sdk/src/logs/logger_provider.cc

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#ifdef ENABLE_LOGS_PREVIEW
55

66
# include "opentelemetry/sdk/logs/logger_provider.h"
7+
# include "opentelemetry/sdk/common/global_log_handler.h"
78

89
# include <memory>
910
# include <mutex>
@@ -26,6 +27,7 @@ LoggerProvider::LoggerProvider(std::unique_ptr<LogRecordProcessor> &&processor,
2627
std::vector<std::unique_ptr<LogRecordProcessor>> processors;
2728
processors.emplace_back(std::move(processor));
2829
context_ = std::make_shared<sdk::logs::LoggerContext>(std::move(processors), std::move(resource));
30+
OTEL_INTERNAL_LOG_DEBUG("[LoggerProvider] LoggerProvider created.");
2931
}
3032

3133
LoggerProvider::LoggerProvider(std::vector<std::unique_ptr<LogRecordProcessor>> &&processors,

sdk/src/metrics/meter_provider.cc

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ MeterProvider::MeterProvider(std::shared_ptr<MeterContext> context) noexcept : c
2424
MeterProvider::MeterProvider(std::unique_ptr<ViewRegistry> views,
2525
sdk::resource::Resource resource) noexcept
2626
: context_(std::make_shared<MeterContext>(std::move(views), resource))
27-
{}
27+
{
28+
OTEL_INTERNAL_LOG_DEBUG("[MeterProvider] MeterProvider created.");
29+
}
2830

2931
nostd::shared_ptr<metrics_api::Meter> MeterProvider::GetMeter(
3032
nostd::string_view name,

sdk/src/trace/tracer_provider.cc

+4-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// SPDX-License-Identifier: Apache-2.0
33

44
#include "opentelemetry/sdk/trace/tracer_provider.h"
5+
#include "opentelemetry/sdk/common/global_log_handler.h"
56
#include "opentelemetry/sdk_config.h"
67

78
OPENTELEMETRY_BEGIN_NAMESPACE
@@ -14,7 +15,9 @@ namespace trace_api = opentelemetry::trace;
1415

1516
TracerProvider::TracerProvider(std::shared_ptr<sdk::trace::TracerContext> context) noexcept
1617
: context_{context}
17-
{}
18+
{
19+
OTEL_INTERNAL_LOG_DEBUG("[TracerProvider] TracerProvider created.");
20+
}
1821

1922
TracerProvider::TracerProvider(std::unique_ptr<SpanProcessor> processor,
2023
resource::Resource resource,

0 commit comments

Comments
 (0)