11from __future__ import annotations
2-
2+ from contextlib import ExitStack
33import functools
44import logging
55from collections .abc import Callable
@@ -70,6 +70,7 @@ def unwrap_recipe(header, message):
7070 if mangle_for_receiving :
7171 message = mangle_for_receiving (message )
7272 if header .get ("workflows-recipe" ) in {True , "True" , "true" , 1 }:
73+ otel_logs = None
7374 rw = RecipeWrapper (message = message , transport = transport_layer )
7475
7576 # Extract recipe ID from environment and add to current span
@@ -79,6 +80,8 @@ def unwrap_recipe(header, message):
7980 if recipe_id :
8081 span .set_attribute ("recipe_id" , recipe_id )
8182
83+
84+
8285 # Extract span_id and trace_id for logging
8386 span_context = span .get_span_context ()
8487 if span_context and span_context .is_valid :
@@ -92,13 +95,17 @@ def unwrap_recipe(header, message):
9295
9396 if recipe_id :
9497 otel_logs ["recipe_id" ] = recipe_id
95- else :
96- otel_logs = "No OTEL related logs available"
97-
98- if log_extender and rw .environment and rw .environment .get ("ID" ):
99- with log_extender ("recipe_ID" , rw .environment ["ID" ]), log_extender ("otel_logs" , otel_logs ):
100- return callback (rw , header , message .get ("payload" ))
101- return callback (rw , header , message .get ("payload" ))
98+
99+ with ExitStack () as stack :
100+ # Configure the context depending on if service is emitting spans
101+ if otel_logs and log_extender and rw .environment and rw .environment .get ("ID" ):
102+ stack .enter_context (log_extender ('recipe_ID' , rw .environment .get ("ID" )))
103+ stack .enter_context (log_extender ('otel_logs' , otel_logs ))
104+ elif log_extender and rw .environment and rw .environment .get ("ID" ):
105+ stack .enter_context (log_extender ('recipe_ID' , rw .environment .get ("ID" )))
106+
107+ return callback (rw , header , message .get ("payload" ))
108+
102109
103110 if allow_non_recipe_messages :
104111 return callback (None , header , message )
0 commit comments