2828 structured logging via ``logging.getLogger``.
2929"""
3030
31+ import logging
3132import time
3233from collections .abc import Awaitable , Callable
3334
4243 Role ,
4344)
4445
46+ logger = logging .getLogger (__name__ )
47+
4548
4649class DebuggingMiddleware (AgentMiddleware ):
4750 """Run-level debugging middleware that prints diagnostic info.
@@ -74,19 +77,18 @@ async def process(
7477 streaming configuration.
7578 next: Callable that invokes the next middleware or the agent itself.
7679 """
77- print ( "[Debug] Debug mode enabled for this run" )
78- print ( f"[Debug] Messages count: { len (context .messages )} " )
79- print ( f"[Debug] Is streaming: { context .is_streaming } " )
80+ logger . debug ( " Debug mode enabled for this run" )
81+ logger . debug ( " Messages count: %d" , len (context .messages ))
82+ logger . debug ( " Is streaming: %s" , context .is_streaming )
8083
81- # Log existing metadata from agent middleware
8284 if context .metadata :
83- print ( f"[Debug] Existing metadata: { context .metadata } " )
85+ logger . debug ( " Existing metadata: %s" , context .metadata )
8486
8587 context .metadata ["debug_enabled" ] = True
8688
8789 await next (context )
8890
89- print ( "[Debug] Debug information collected" )
91+ logger . debug ( " Debug information collected" )
9092
9193
9294class LoggingFunctionMiddleware (FunctionMiddleware ):
@@ -136,59 +138,60 @@ async def process(
136138 duration = end_time - start_time
137139
138140 # Build comprehensive log output
139- print ("\n " + "=" * 80 )
140- print ("[LoggingFunctionMiddleware] Function Call" )
141- print ("=" * 80 )
142- print (f"Function Name: { function_name } " )
143- print (f"Execution Time: { duration :.5f} s" )
141+ log_lines = [
142+ "" ,
143+ "=" * 80 ,
144+ "[LoggingFunctionMiddleware] Function Call" ,
145+ "=" * 80 ,
146+ f"Function Name: { function_name } " ,
147+ f"Execution Time: { duration :.5f} s" ,
148+ ]
144149
145- # Display arguments
146150 if args_info :
147- print ("\n Arguments:" )
151+ log_lines . append ("\n Arguments:" )
148152 for arg in args_info :
149- print (f" - { arg } " )
153+ log_lines . append (f" - { arg } " )
150154 else :
151- print ("\n Arguments: None" )
155+ log_lines . append ("\n Arguments: None" )
152156
153- # Display output results
154157 if context .result :
155- print ("\n Output Results:" )
158+ log_lines . append ("\n Output Results:" )
156159
157- # Ensure context.result is treated as a list
158160 results = (
159161 context .result if isinstance (context .result , list ) else [context .result ]
160162 )
161163
162164 for idx , result in enumerate (results ):
163- print (f" Result #{ idx + 1 } :" )
165+ log_lines . append (f" Result #{ idx + 1 } :" )
164166
165- # Use raw_representation to get the actual output
166167 if hasattr (result , "raw_representation" ):
167168 raw_output = result .raw_representation
168169 raw_type = type (raw_output ).__name__
169- print (f" Type: { raw_type } " )
170+ log_lines . append (f" Type: { raw_type } " )
170171
171- # Limit output length for very large content
172172 output_str = str (raw_output )
173173 if len (output_str ) > 1000 :
174- print (f" Output (truncated): { output_str [:1000 ]} ..." )
174+ log_lines .append (
175+ f" Output (truncated): { output_str [:1000 ]} ..."
176+ )
175177 else :
176- print (f" Output: { output_str } " )
177- # result is just string or primitive
178+ log_lines .append (f" Output: { output_str } " )
178179 else :
179180 output_str = str (result )
180181 if len (output_str ) > 1000 :
181- print (f" Output (truncated): { output_str [:1000 ]} ..." )
182+ log_lines .append (
183+ f" Output (truncated): { output_str [:1000 ]} ..."
184+ )
182185 else :
183- print (f" Output: { output_str } " )
186+ log_lines . append (f" Output: { output_str } " )
184187
185- # Check if result has error flag
186188 if hasattr (result , "is_error" ):
187- print (f" Is Error: { result .is_error } " )
189+ log_lines . append (f" Is Error: { result .is_error } " )
188190 else :
189- print ("\n Output Results: None" )
191+ log_lines . append ("\n Output Results: None" )
190192
191- print ("=" * 80 + "\n " )
193+ log_lines .append ("=" * 80 )
194+ logger .debug ("\n " .join (log_lines ))
192195
193196
194197class InputObserverMiddleware (ChatMiddleware ):
@@ -234,13 +237,15 @@ async def process(
234237 context: The chat context containing the message list.
235238 next: Callable that invokes the next middleware or the chat client.
236239 """
237- print ("[InputObserverMiddleware] Observing input messages:" )
240+ logger . debug ("[InputObserverMiddleware] Observing input messages:" )
238241
239242 for i , message in enumerate (context .messages ):
240243 content = message .text if message .text else str (message .contents )
241- print ( f " Message { i + 1 } ( { message .role .value } ): { content } " )
244+ logger . debug ( " Message %d (%s): %s" , i + 1 , message .role .value , content )
242245
243- print (f"[InputObserverMiddleware] Total messages: { len (context .messages )} " )
246+ logger .debug (
247+ "[InputObserverMiddleware] Total messages: %d" , len (context .messages )
248+ )
244249
245250 # Modify user messages by creating new messages with enhanced text
246251 modified_messages : list [ChatMessage ] = []
@@ -253,8 +258,10 @@ async def process(
253258
254259 if self .replacement :
255260 updated_text = self .replacement
256- print (
257- f"[InputObserverMiddleware] Updated: '{ original_text } ' -> '{ updated_text } '"
261+ logger .debug (
262+ "[InputObserverMiddleware] Updated: '%s' -> '%s'" ,
263+ original_text ,
264+ updated_text ,
258265 )
259266
260267 modified_message = ChatMessage (role = message .role , text = updated_text )
@@ -270,4 +277,4 @@ async def process(
270277 await next (context )
271278
272279 # Observe that processing is complete
273- print ("[InputObserverMiddleware] Processing completed" )
280+ logger . debug ("[InputObserverMiddleware] Processing completed" )
0 commit comments