Skip to content

Commit a2aafad

Browse files
RSDK-7195: fix no event loop logging error (#579)
1 parent ef17c0d commit a2aafad

File tree

1 file changed

+12
-5
lines changed

1 file changed

+12
-5
lines changed

src/viam/logging.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)