Skip to content

Commit f342936

Browse files
bitspradpAlex Boten
authored and
Alex Boten
committed
Added a warning log when the existing TracerProvider and MeterProvider are overridden (#856)
1 parent 16650aa commit f342936

File tree

5 files changed

+50
-0
lines changed

5 files changed

+50
-0
lines changed

opentelemetry-api/CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ Released 2020-06-10
1616
([#764](https://github.com/open-telemetry/opentelemetry-python/pull/764))
1717
- Add SumObserver and UpDownSumObserver in metrics
1818
([#789](https://github.com/open-telemetry/opentelemetry-python/pull/789))
19+
- Log a warning when replacing the global Tracer/Meter provider
20+
([#856](https://github.com/open-telemetry/opentelemetry-python/pull/856))
1921

2022
## 0.8b0
2123

opentelemetry-api/src/opentelemetry/metrics/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -460,6 +460,10 @@ def get_meter(
460460
def set_meter_provider(meter_provider: MeterProvider) -> None:
461461
"""Sets the current global :class:`~.MeterProvider` object."""
462462
global _METER_PROVIDER # pylint: disable=global-statement
463+
464+
if _METER_PROVIDER is not None:
465+
logger.warning("Overriding current MeterProvider")
466+
463467
_METER_PROVIDER = meter_provider
464468

465469

opentelemetry-api/src/opentelemetry/trace/__init__.py

+4
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,10 @@ def get_tracer(
463463
def set_tracer_provider(tracer_provider: TracerProvider) -> None:
464464
"""Sets the current global :class:`~.TracerProvider` object."""
465465
global _TRACER_PROVIDER # pylint: disable=global-statement
466+
467+
if _TRACER_PROVIDER is not None:
468+
logger.warning("Overriding current TracerProvider")
469+
466470
_TRACER_PROVIDER = tracer_provider
467471

468472

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# type:ignore
2+
import unittest
3+
from logging import WARNING
4+
5+
from opentelemetry import metrics
6+
from opentelemetry.sdk.metrics import MeterProvider
7+
8+
9+
class TestGlobals(unittest.TestCase):
10+
def test_meter_provider_override_warning(self):
11+
"""metrics.set_meter_provider should throw a warning when overridden"""
12+
metrics.set_meter_provider(MeterProvider())
13+
with self.assertLogs(level=WARNING) as test:
14+
metrics.set_meter_provider(MeterProvider())
15+
self.assertEqual(
16+
test.output,
17+
[
18+
(
19+
"WARNING:opentelemetry.metrics:Overriding current "
20+
"MeterProvider"
21+
)
22+
],
23+
)

opentelemetry-api/tests/trace/test_globals.py

+17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import unittest
2+
from logging import WARNING
23
from unittest.mock import patch
34

45
from opentelemetry import context, trace
6+
from opentelemetry.sdk.trace import TracerProvider # type:ignore
57

68

79
class TestGlobals(unittest.TestCase):
@@ -20,6 +22,21 @@ def test_get_tracer(self):
2022
trace.get_tracer("foo", "var", mock_provider)
2123
mock_provider.get_tracer.assert_called_with("foo", "var")
2224

25+
def test_tracer_provider_override_warning(self):
26+
"""trace.set_tracer_provider should throw a warning when overridden"""
27+
trace.set_tracer_provider(TracerProvider())
28+
with self.assertLogs(level=WARNING) as test:
29+
trace.set_tracer_provider(TracerProvider())
30+
self.assertEqual(
31+
test.output,
32+
[
33+
(
34+
"WARNING:opentelemetry.trace:Overriding current "
35+
"TracerProvider"
36+
)
37+
],
38+
)
39+
2340

2441
class TestTracer(unittest.TestCase):
2542
def setUp(self):

0 commit comments

Comments
 (0)