@@ -142,7 +142,7 @@ def process_loop(self):
142142 try :
143143 asyncio .run (self ._run_pipeline_loops ())
144144 except Exception as e :
145- self ._report_error (f "Error in process run method: { e } " )
145+ self ._report_error ("Error in process run method" , e )
146146
147147
148148 def _handle_logging_params (self , params : dict ) -> bool :
@@ -169,8 +169,7 @@ async def _initialize_pipeline(self):
169169 await pipeline .initialize (** params )
170170 return pipeline
171171 except Exception as e :
172- self ._report_error (f"Error loading pipeline: { e } " )
173- logging .exception (e )
172+ self ._report_error ("Error loading pipeline" , e )
174173 if not params :
175174 # Already tried loading with default params
176175 raise
@@ -182,7 +181,7 @@ async def _initialize_pipeline(self):
182181 await pipeline .initialize ()
183182 return pipeline
184183 except Exception as e :
185- self ._report_error (f "Error loading pipeline with default params: { e } " )
184+ self ._report_error ("Error loading pipeline with default params" , e )
186185 raise
187186
188187 async def _run_pipeline_loops (self ):
@@ -201,7 +200,7 @@ async def wait_for_stop():
201200 try :
202201 await asyncio .wait (tasks , return_when = asyncio .FIRST_COMPLETED )
203202 except Exception as e :
204- self ._report_error (f "Error in pipeline loops: { e } " )
203+ self ._report_error ("Error in pipeline loops" , e )
205204 finally :
206205 for task in tasks :
207206 task .cancel ()
@@ -223,8 +222,7 @@ async def _input_loop(self, pipeline: Pipeline):
223222 # Timeout ensures the non-daemon threads from to_thread can exit if task is cancelled
224223 continue
225224 except Exception as e :
226- self ._report_error (f"Error processing input frame: { e } " )
227- logging .exception (e )
225+ self ._report_error ("Error processing input frame" , e )
228226
229227 async def _output_loop (self , pipeline : Pipeline ):
230228 while not self .is_done ():
@@ -235,7 +233,7 @@ async def _output_loop(self, pipeline: Pipeline):
235233 output .log_timestamps ["post_process_frame" ] = time .time ()
236234 self ._try_queue_put (self .output_queue , output )
237235 except Exception as e :
238- self ._report_error (f "Error processing output frame: { e } " )
236+ self ._report_error ("Error processing output frame" , e )
239237
240238 async def _param_update_loop (self , pipeline : Pipeline ):
241239 while not self .is_done ():
@@ -250,7 +248,7 @@ async def _param_update_loop(self, pipeline: Pipeline):
250248 with log_timing (f"PipelineProcess: Pipeline update parameters with params_hash={ params_hash } " ):
251249 await pipeline .update_params (** params )
252250 except Exception as e :
253- self ._report_error (f "Error updating params: { e } " )
251+ self ._report_error ("Error updating params" , e )
254252
255253 async def _get_latest_params (self , timeout : float ) -> dict | None :
256254 """
@@ -278,12 +276,14 @@ async def _get_latest_params(self, timeout: float) -> dict | None:
278276
279277 return params
280278
281- def _report_error (self , error_msg : str ):
279+ def _report_error (self , msg : str , error : Exception | None = None , silent = False ):
280+ if not silent :
281+ logging .error (msg , exc_info = error )
282+
282283 error_event = {
283- "message" : error_msg ,
284+ "message" : f" { msg } : { error } " if error else msg ,
284285 "timestamp" : time .time ()
285286 }
286- logging .error (error_msg )
287287 self ._try_queue_put (self .error_queue , error_event )
288288
289289 async def _cleanup_pipeline (self , pipeline ):
@@ -356,6 +356,11 @@ def __init__(self, process: PipelineProcess):
356356 def emit (self , record ):
357357 msg = self .format (record )
358358 self .process ._try_queue_put (self .process .log_queue , msg )
359+ try :
360+ if getattr (record , "report_error" , False ):
361+ self .process ._report_error (record .getMessage (), silent = True )
362+ except Exception as e :
363+ logging .error (f"Error reporting error: { e } " )
359364
360365# Function to clear the queue
361366def clear_queue (queue ):
0 commit comments