From ef306b90853b70700f6d4bcae47c182f1bb14d5c Mon Sep 17 00:00:00 2001 From: Dylan Russell Date: Thu, 30 Jul 2026 14:25:02 +0000 Subject: [PATCH 1/2] Fix v1.44 issue --- .../exporter/cloud_logging/__init__.py | 10 ++++++++++ .../tests/test_cloud_logging.py | 13 +++++++++++++ 2 files changed, 23 insertions(+) diff --git a/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py b/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py index 5faa415b..c15e9a40 100644 --- a/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py +++ b/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py @@ -81,6 +81,8 @@ _OTEL_SDK_VERSION = opentelemetry_sdk_version.__version__ _USER_AGENT = f"opentelemetry-python {_OTEL_SDK_VERSION}; google-cloud-logging-exporter {__version__}" +logger = logging.getLogger(__name__) + # Set user-agent metadata, see https://github.com/grpc/grpc/issues/23644 and default options # from # https://github.com/googleapis/python-logging/blob/5309478c054d0f2b9301817fd835f2098f51dc3a/google/cloud/logging_v2/services/logging_service_v2/transports/grpc.py#L179-L182 @@ -474,5 +476,13 @@ def _write_log_entries_to_client( "Error while writing to Cloud Logging", exc_info=ex ) + def force_flush(self, timeout_millis: float = 30_000) -> bool: + """Flushes any buffered logs. + + For CloudLoggingExporter, this is a no-op as logs are exported synchronously. + """ + logger.info("force_flush does nothing for CloudLoggingExporter") + return True + def shutdown(self): pass diff --git a/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py b/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py index 50079a1d..d628c55f 100644 --- a/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py +++ b/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py @@ -26,6 +26,7 @@ Be sure to review the changes. """ +import logging import re from io import StringIO from textwrap import dedent @@ -452,3 +453,15 @@ def test_deprecation_warning(): buf = StringIO() with pytest.deprecated_call(): CloudLoggingExporter(project_id=PROJECT_ID, structured_json_file=buf) + + +def test_force_flush(caplog): + buf = StringIO() + with pytest.deprecated_call(): + exporter = CloudLoggingExporter( + project_id=PROJECT_ID, structured_json_file=buf + ) + with caplog.at_level(logging.INFO): + assert exporter.force_flush() is True + assert exporter.force_flush(timeout_millis=1000) is True + assert "force_flush does nothing for CloudLoggingExporter" in caplog.text From 205e7365e51be540e742504c78178711e548fec3 Mon Sep 17 00:00:00 2001 From: Dylan Russell Date: Thu, 30 Jul 2026 17:49:20 +0000 Subject: [PATCH 2/2] Respond to comments and fix CI --- opentelemetry-exporter-gcp-logging/CHANGELOG.md | 2 ++ .../src/opentelemetry/exporter/cloud_logging/__init__.py | 3 ++- opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/opentelemetry-exporter-gcp-logging/CHANGELOG.md b/opentelemetry-exporter-gcp-logging/CHANGELOG.md index 39e77208..f81452ef 100644 --- a/opentelemetry-exporter-gcp-logging/CHANGELOG.md +++ b/opentelemetry-exporter-gcp-logging/CHANGELOG.md @@ -2,6 +2,8 @@ ## Unreleased +- Add `force_flush` method to `CloudLoggingExporter` (#559) + ## Version 1.13.0a0 Released 2026-07-29 diff --git a/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py b/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py index c15e9a40..7a252579 100644 --- a/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py +++ b/opentelemetry-exporter-gcp-logging/src/opentelemetry/exporter/cloud_logging/__init__.py @@ -476,12 +476,13 @@ def _write_log_entries_to_client( "Error while writing to Cloud Logging", exc_info=ex ) + # pylint: disable=unused-argument,no-self-use def force_flush(self, timeout_millis: float = 30_000) -> bool: """Flushes any buffered logs. For CloudLoggingExporter, this is a no-op as logs are exported synchronously. """ - logger.info("force_flush does nothing for CloudLoggingExporter") + logger.debug("force_flush does nothing for CloudLoggingExporter") return True def shutdown(self): diff --git a/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py b/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py index d628c55f..766cfb07 100644 --- a/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py +++ b/opentelemetry-exporter-gcp-logging/tests/test_cloud_logging.py @@ -461,7 +461,7 @@ def test_force_flush(caplog): exporter = CloudLoggingExporter( project_id=PROJECT_ID, structured_json_file=buf ) - with caplog.at_level(logging.INFO): + with caplog.at_level(logging.DEBUG): assert exporter.force_flush() is True assert exporter.force_flush(timeout_millis=1000) is True assert "force_flush does nothing for CloudLoggingExporter" in caplog.text