@@ -39,8 +39,6 @@ def handle_task_result(self, task: asyncio.Task):
3939 _ = task .result ()
4040 except (asyncio .CancelledError , asyncio .InvalidStateError , StreamTerminatedError ):
4141 pass
42- except Exception :
43- self ._logger .exception ("Exception raised by task = %r" , task )
4442
4543 def emit (self , record : logging .LogRecord ):
4644 assert isinstance (record , logging .LogRecord )
@@ -51,9 +49,18 @@ def emit(self, record: logging.LogRecord):
5149
5250 try :
5351 assert self ._parent is not None
54- asyncio .create_task (
55- self ._parent .log (name , record .levelname , time , message , stack ), name = f"{ viam ._TASK_PREFIX } -LOG-{ record .created } "
56- ).add_done_callback (self .handle_task_result )
52+ try :
53+ loop = asyncio .get_event_loop ()
54+ loop .create_task (
55+ self ._parent .log (name , record .levelname , time , message , stack ), name = f"{ viam ._TASK_PREFIX } -LOG-{ record .created } "
56+ ).add_done_callback (self .handle_task_result )
57+ except RuntimeError :
58+ # If the log is coming from a thread that doesn't have an event loop, create and set a new one.
59+ loop = asyncio .new_event_loop ()
60+ asyncio .set_event_loop (loop )
61+ loop .create_task (
62+ self ._parent .log (name , record .levelname , time , message , stack ), name = f"{ viam ._TASK_PREFIX } -LOG-{ record .created } "
63+ ).add_done_callback (self .handle_task_result )
5764 except Exception as err :
5865 # If the module log fails, log using stdout/stderr handlers
5966 self ._logger .error (f"ModuleLogger failed for { record .name } - { err } " )
0 commit comments