diff --git a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md index a314e2090ab1..ccec7162c262 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md +++ b/sdk/monitor/azure-monitor-opentelemetry/CHANGELOG.md @@ -4,6 +4,9 @@ ### Features Added +- Distro to automatically configure event logger provider + ([#38543](https://github.com/Azure/azure-sdk-for-python/pull/38543)) + ### Breaking Changes ### Bugs Fixed diff --git a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py index 18e349913678..d344e0865b4b 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/azure/monitor/opentelemetry/_configure.py @@ -7,6 +7,7 @@ from logging import getLogger from typing import Dict, List, cast +from opentelemetry._events import set_event_logger_provider from opentelemetry._logs import set_logger_provider from opentelemetry.instrumentation.dependencies import ( get_dist_dependency_conflicts, @@ -15,6 +16,7 @@ BaseInstrumentor, ) from opentelemetry.metrics import set_meter_provider +from opentelemetry.sdk._events import EventLoggerProvider from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler from opentelemetry.sdk._logs.export import BatchLogRecordProcessor from opentelemetry.sdk.metrics import MeterProvider @@ -172,6 +174,10 @@ def _setup_logging(configurations: Dict[str, ConfigurationValue]): logger_name: str = configurations[LOGGER_NAME_ARG] # type: ignore getLogger(logger_name).addHandler(handler) + # Setup EventLoggerProvider + event_provider = EventLoggerProvider(logger_provider) + set_event_logger_provider(event_provider) + def _setup_metrics(configurations: Dict[str, ConfigurationValue]): resource: Resource = configurations[RESOURCE_ARG] # type: ignore diff --git a/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt b/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt index 5e5654475d4e..82e943333b52 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt +++ b/sdk/monitor/azure-monitor-opentelemetry/dev_requirements.txt @@ -3,6 +3,6 @@ pytest django fastapi-slim flask -psycopg2-binary; python_version >= '3.9' +psycopg2-binary requests urllib3 diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py b/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py index 222e03120f7a..f12f1f9ed128 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/instrumentation/test_psycopg2.py @@ -3,14 +3,14 @@ # Licensed under the MIT License. See License in the project root for # license information. # -------------------------------------------------------------------------- -import platform +import os import pytest import sys import unittest # Skip for Python v3.13 until https://github.com/psycopg/psycopg2/pull/1729 is resolved # Skip for Python v3.8 on windows due to https://github.com/psycopg/psycopg/issues/936 -if not (platform.system() == "Windows" and sys.version_info < (3, 9)) and sys.implementation.name != "pypy": +if (os.name != "nt" or sys.version_info > (3, 8)) and sys.implementation.name != "pypy": from opentelemetry.instrumentation.psycopg2 import ( Psycopg2Instrumentor, ) @@ -19,7 +19,7 @@ class TestPsycopg2Instrumentation(unittest.TestCase): @pytest.mark.skipif( - platform.system() == "Windows" and sys.version_info < (3, 9) or sys.implementation.name == "pypy", + (os.name == "nt" and sys.version_info < (3, 9)) or sys.implementation.name == "pypy", reason="Psycopg2 not supported for pypy, Windows Py3.8", ) def test_instrument(self): diff --git a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py index e084c5205c26..5d1e5ca91d28 100644 --- a/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py +++ b/sdk/monitor/azure-monitor-opentelemetry/tests/test_configure.py @@ -303,6 +303,13 @@ def test_setup_tracing( tp_init_mock.add_span_processor.assert_has_calls([call(custom_sp), call(bsp_init_mock)]) self.assertEqual(azure_core_mock.tracing_implementation, OpenTelemetrySpan) + @patch( + "azure.monitor.opentelemetry._configure.set_event_logger_provider", + ) + @patch( + "azure.monitor.opentelemetry._configure.EventLoggerProvider", + autospec=True, + ) @patch( "azure.monitor.opentelemetry._configure.getLogger", ) @@ -330,10 +337,14 @@ def test_setup_logging( blrp_mock, logging_handler_mock, get_logger_mock, + elp_mock, + set_elp_mock, ): lp_init_mock = Mock() lp_mock.return_value = lp_init_mock log_exp_init_mock = Mock() + elp_init_mock = Mock() + elp_mock.return_value = elp_init_mock log_exporter_mock.return_value = log_exp_init_mock blrp_init_mock = Mock() blrp_mock.return_value = blrp_init_mock @@ -359,6 +370,8 @@ def test_setup_logging( logging_handler_mock.assert_called_once_with(logger_provider=lp_init_mock) get_logger_mock.assert_called_once_with("test") logger_mock.addHandler.assert_called_once_with(logging_handler_init_mock) + elp_mock.assert_called_once_with(lp_init_mock) + set_elp_mock.assert_called_once_with(elp_init_mock) @patch( "azure.monitor.opentelemetry._configure.PeriodicExportingMetricReader",