diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d14896238..4543abf20a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,6 +28,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `opentelemetry-instrumentation-aiohttp-server`: add support for custom header captures via `OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_REQUEST` and `OTEL_INSTRUMENTATION_HTTP_CAPTURE_HEADERS_SERVER_RESPONSE` ([#3916](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3916)) - `opentelemetry-instrumentation-redis`: add support for `suppress_instrumentation` context manager for both sync and async Redis clients and pipelines +- Update for Log SDK breaking changes. Rename InMemoryLogExporter to InMemoryLogRecordExporter in several tests + ([#3850](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3589)) ### Fixed diff --git a/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/common/otel_mocker.py b/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/common/otel_mocker.py index 1d1fa26194..d5d1e6d178 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/common/otel_mocker.py +++ b/instrumentation-genai/opentelemetry-instrumentation-google-genai/tests/common/otel_mocker.py @@ -22,10 +22,21 @@ ) from opentelemetry.metrics import get_meter_provider, set_meter_provider from opentelemetry.sdk._logs import LoggerProvider -from opentelemetry.sdk._logs.export import ( - InMemoryLogExporter, - SimpleLogRecordProcessor, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs.export import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + SimpleLogRecordProcessor, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs.export import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) + from opentelemetry.sdk._logs.export import ( + SimpleLogRecordProcessor, + ) from opentelemetry.sdk.metrics import MeterProvider from opentelemetry.sdk.metrics._internal.export import InMemoryMetricReader from opentelemetry.sdk.trace import TracerProvider @@ -114,7 +125,7 @@ def data(self): class OTelMocker: def __init__(self): self._snapshot = None - self._logs = InMemoryLogExporter() + self._logs = InMemoryLogRecordExporter() self._traces = InMemorySpanExporter() self._metrics = InMemoryMetricReader() self._spans = [] diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/conftest.py b/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/conftest.py index 83a4ba8c67..af626d7990 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/conftest.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/conftest.py @@ -12,10 +12,21 @@ OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT, ) from opentelemetry.sdk._logs import LoggerProvider -from opentelemetry.sdk._logs.export import ( - InMemoryLogExporter, - SimpleLogRecordProcessor, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs.export import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + SimpleLogRecordProcessor, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs.export import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) + from opentelemetry.sdk._logs.export import ( + SimpleLogRecordProcessor, + ) from opentelemetry.sdk.metrics import ( MeterProvider, ) @@ -38,7 +49,7 @@ def fixture_span_exporter(): @pytest.fixture(scope="function", name="log_exporter") def fixture_log_exporter(): - exporter = InMemoryLogExporter() + exporter = InMemoryLogRecordExporter() yield exporter diff --git a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/conftest.py b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/conftest.py index 3815e20dac..0cf7ba0c41 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/conftest.py +++ b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/conftest.py @@ -39,10 +39,21 @@ OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT, ) from opentelemetry.sdk._logs import LoggerProvider -from opentelemetry.sdk._logs.export import ( - InMemoryLogExporter, - SimpleLogRecordProcessor, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs.export import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + SimpleLogRecordProcessor, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs.export import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) + from opentelemetry.sdk._logs.export import ( + SimpleLogRecordProcessor, + ) from opentelemetry.sdk.metrics import ( MeterProvider, ) @@ -66,7 +77,7 @@ def fixture_span_exporter(): @pytest.fixture(scope="function", name="log_exporter") def fixture_log_exporter(): - exporter = InMemoryLogExporter() + exporter = InMemoryLogRecordExporter() yield exporter diff --git a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions.py b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions.py index 61bbc0775a..9e05a64a4c 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions.py +++ b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions.py @@ -13,9 +13,17 @@ ) from opentelemetry.instrumentation.vertexai import VertexAIInstrumentor -from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( - InMemoryLogExporter, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) from opentelemetry.sdk.trace import ReadableSpan from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( InMemorySpanExporter, @@ -26,7 +34,7 @@ @pytest.mark.vcr() def test_generate_content( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_content: VertexAIInstrumentor, ): @@ -94,7 +102,7 @@ def test_generate_content( @pytest.mark.vcr() def test_generate_content_without_events( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_no_content: VertexAIInstrumentor, ): @@ -242,7 +250,7 @@ def test_generate_content_invalid_temperature( @pytest.mark.vcr() def test_generate_content_invalid_role( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_content: VertexAIInstrumentor, ): @@ -335,7 +343,7 @@ def assert_span_error(span: ReadableSpan) -> None: @pytest.mark.vcr() def test_generate_content_all_events( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_content: VertexAIInstrumentor, ): @@ -353,7 +361,7 @@ def test_generate_content_all_events( @pytest.mark.vcr() def test_preview_generate_content_all_input_events( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_content: VertexAIInstrumentor, ): @@ -371,7 +379,7 @@ def test_preview_generate_content_all_input_events( def generate_content_all_input_events( model: GenerativeModel | PreviewGenerativeModel, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_content: VertexAIInstrumentor, ): model.generate_content( diff --git a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions_experimental.py b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions_experimental.py index fa37f77d0b..5613f551a6 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions_experimental.py +++ b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_chat_completions_experimental.py @@ -14,9 +14,17 @@ ) from opentelemetry.instrumentation.vertexai import VertexAIInstrumentor -from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( - InMemoryLogExporter, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) from opentelemetry.sdk.trace import ReadableSpan from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( InMemorySpanExporter, @@ -27,7 +35,7 @@ @pytest.mark.vcr() def test_generate_content_with_files( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_experimental_semconvs: VertexAIInstrumentor, ): @@ -113,7 +121,7 @@ def test_generate_content_with_files( @pytest.mark.vcr() def test_generate_content_without_events( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_experimental_semconvs: VertexAIInstrumentor, ): @@ -274,7 +282,7 @@ def test_generate_content_invalid_temperature( @pytest.mark.vcr() def test_generate_content_invalid_role( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_experimental_semconvs: VertexAIInstrumentor, ): @@ -371,7 +379,7 @@ def assert_span_error(span: ReadableSpan) -> None: @pytest.mark.vcr() def test_generate_content_all_events( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_experimental_semconvs: VertexAIInstrumentor, ): @@ -389,7 +397,7 @@ def test_generate_content_all_events( @pytest.mark.vcr() def test_preview_generate_content_all_input_events( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, generate_content: callable, instrument_with_experimental_semconvs: VertexAIInstrumentor, ): @@ -407,7 +415,7 @@ def test_preview_generate_content_all_input_events( def generate_content_all_input_events( model: GenerativeModel | PreviewGenerativeModel, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_experimental_semconvs: VertexAIInstrumentor, ): model.generate_content( diff --git a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling.py b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling.py index 4ff06aa379..74269d699f 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling.py +++ b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling.py @@ -5,9 +5,17 @@ ) from opentelemetry.instrumentation.vertexai import VertexAIInstrumentor -from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( - InMemoryLogExporter, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( InMemorySpanExporter, ) @@ -16,7 +24,7 @@ @pytest.mark.vcr() def test_function_call_choice( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_content: VertexAIInstrumentor, generate_content: callable, ): @@ -96,7 +104,7 @@ def test_function_call_choice( @pytest.mark.vcr() def test_function_call_choice_no_content( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_no_content: VertexAIInstrumentor, generate_content: callable, ): @@ -136,7 +144,7 @@ def test_function_call_choice_no_content( @pytest.mark.vcr() def test_tool_events( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_content: VertexAIInstrumentor, generate_content: callable, ): @@ -228,7 +236,7 @@ def test_tool_events( @pytest.mark.vcr() def test_tool_events_no_content( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_no_content: VertexAIInstrumentor, generate_content: callable, ): diff --git a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling_experimental.py b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling_experimental.py index 76d3fd31e6..e251363062 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling_experimental.py +++ b/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/test_function_calling_experimental.py @@ -10,9 +10,17 @@ ) from opentelemetry.instrumentation.vertexai import VertexAIInstrumentor -from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( - InMemoryLogExporter, -) + +# Backward compatibility for InMemoryLogExporter -> InMemoryLogRecordExporter rename +try: + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( # pylint: disable=no-name-in-module + InMemoryLogRecordExporter, + ) +except ImportError: + # Fallback to old name for compatibility with older SDK versions + from opentelemetry.sdk._logs._internal.export.in_memory_log_exporter import ( + InMemoryLogExporter as InMemoryLogRecordExporter, + ) from opentelemetry.sdk.trace.export.in_memory_span_exporter import ( InMemorySpanExporter, ) @@ -20,7 +28,7 @@ def test_function_call_choice( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_experimental_semconvs: VertexAIInstrumentor, generate_content: callable, ): @@ -92,7 +100,7 @@ def test_function_call_choice( @pytest.mark.vcr() def test_function_call_choice_no_content( - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_no_content_with_experimental_semconvs: VertexAIInstrumentor, generate_content: callable, ): @@ -117,7 +125,7 @@ def test_function_call_choice_no_content( @pytest.mark.vcr() def test_tool_events( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_experimental_semconvs: VertexAIInstrumentor, generate_content: callable, ): @@ -216,7 +224,7 @@ def test_tool_events( @pytest.mark.vcr() def test_tool_events_no_content( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_no_content_with_experimental_semconvs: VertexAIInstrumentor, generate_content: callable, ): @@ -261,7 +269,7 @@ def assert_fsspec_equal(path: str, value: Any) -> None: @pytest.mark.vcr() def test_tool_events_with_completion_hook( span_exporter: InMemorySpanExporter, - log_exporter: InMemoryLogExporter, + log_exporter: InMemoryLogRecordExporter, instrument_with_upload_hook: VertexAIInstrumentor, generate_content: callable, ): diff --git a/instrumentation/opentelemetry-instrumentation-botocore/tests/conftest.py b/instrumentation/opentelemetry-instrumentation-botocore/tests/conftest.py index 36ed79baab..205c8083f9 100644 --- a/instrumentation/opentelemetry-instrumentation-botocore/tests/conftest.py +++ b/instrumentation/opentelemetry-instrumentation-botocore/tests/conftest.py @@ -13,7 +13,7 @@ ) from opentelemetry.sdk._logs import LoggerProvider from opentelemetry.sdk._logs.export import ( - InMemoryLogExporter, + InMemoryLogRecordExporter, SimpleLogRecordProcessor, ) from opentelemetry.sdk.metrics import ( @@ -37,7 +37,7 @@ def fixture_span_exporter(): @pytest.fixture(scope="function", name="log_exporter") def fixture_log_exporter(): - exporter = InMemoryLogExporter() + exporter = InMemoryLogRecordExporter() yield exporter