From 5866e0e5da0386336a911761a8b9deed15bf075f Mon Sep 17 00:00:00 2001 From: A Vertex SDK engineer Date: Wed, 11 Feb 2026 05:06:02 -0800 Subject: [PATCH] feat: Update the ADK template to export logs directly to Cloud Logging when OTEL_SEMCONV_STABILITY_OPT_IN is set to "gen_ai_latest_experimental". PiperOrigin-RevId: 868620139 --- vertexai/agent_engines/templates/adk.py | 32 +++++++++++++------ .../reasoning_engines/templates/adk.py | 32 +++++++++++++------ 2 files changed, 46 insertions(+), 18 deletions(-) diff --git a/vertexai/agent_engines/templates/adk.py b/vertexai/agent_engines/templates/adk.py index cb27b97a31..2c5f621a7a 100644 --- a/vertexai/agent_engines/templates/adk.py +++ b/vertexai/agent_engines/templates/adk.py @@ -454,17 +454,31 @@ def force_flush( return True logger_provider = opentelemetry.sdk._logs.LoggerProvider(resource=resource) - logger_provider.add_log_record_processor( - _SimpleLogRecordProcessor( - opentelemetry.exporter.cloud_logging.CloudLoggingExporter( - project_id=project_id, - default_log_name=os.getenv( - "GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine" + if "gen_ai_latest_experimental" in os.getenv( + "OTEL_SEMCONV_STABILITY_OPT_IN", "" + ).split(","): + logger_provider.add_log_record_processor( + opentelemetry.sdk._logs.export.BatchLogRecordProcessor( + opentelemetry.exporter.cloud_logging.CloudLoggingExporter( + project_id=project_id, + default_log_name=os.getenv( + "GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine" + ), ), - structured_json_file=sys.stdout, - ), + ) + ) + else: + logger_provider.add_log_record_processor( + _SimpleLogRecordProcessor( + opentelemetry.exporter.cloud_logging.CloudLoggingExporter( + project_id=project_id, + default_log_name=os.getenv( + "GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine" + ), + structured_json_file=sys.stdout, + ), + ) ) - ) event_logger_provider = opentelemetry.sdk._events.EventLoggerProvider( logger_provider=logger_provider ) diff --git a/vertexai/preview/reasoning_engines/templates/adk.py b/vertexai/preview/reasoning_engines/templates/adk.py index 6d7b4aa255..364d134abe 100644 --- a/vertexai/preview/reasoning_engines/templates/adk.py +++ b/vertexai/preview/reasoning_engines/templates/adk.py @@ -456,17 +456,31 @@ def force_flush( return True logger_provider = opentelemetry.sdk._logs.LoggerProvider(resource=resource) - logger_provider.add_log_record_processor( - _SimpleLogRecordProcessor( - opentelemetry.exporter.cloud_logging.CloudLoggingExporter( - project_id=project_id, - default_log_name=os.getenv( - "GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine" + if "gen_ai_latest_experimental" in os.getenv( + "OTEL_SEMCONV_STABILITY_OPT_IN", "" + ).split(","): + logger_provider.add_log_record_processor( + opentelemetry.sdk._logs.export.BatchLogRecordProcessor( + opentelemetry.exporter.cloud_logging.CloudLoggingExporter( + project_id=project_id, + default_log_name=os.getenv( + "GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine" + ), ), - structured_json_file=sys.stdout, - ), + ) + ) + else: + logger_provider.add_log_record_processor( + _SimpleLogRecordProcessor( + opentelemetry.exporter.cloud_logging.CloudLoggingExporter( + project_id=project_id, + default_log_name=os.getenv( + "GCP_DEFAULT_LOG_NAME", "adk-on-agent-engine" + ), + structured_json_file=sys.stdout, + ), + ) ) - ) event_logger_provider = opentelemetry.sdk._events.EventLoggerProvider( logger_provider=logger_provider )