diff --git a/src/isolate/connections/grpc/_base.py b/src/isolate/connections/grpc/_base.py index fa3531a..d78c961 100644 --- a/src/isolate/connections/grpc/_base.py +++ b/src/isolate/connections/grpc/_base.py @@ -16,6 +16,7 @@ from isolate.connections.grpc import agent, definitions from isolate.connections.grpc.configuration import get_default_options from isolate.connections.grpc.interface import from_grpc +from isolate.logger import logger from isolate.logs import LogLevel, LogSource @@ -148,5 +149,5 @@ def get_python_cmd( ] def handle_agent_log(self, line: str, level: LogLevel, source: LogSource) -> None: - print(f"[{source}] [{level}] {line}") + logger.log(level, line, source) self.log(line, level=level, source=source) diff --git a/src/isolate/connections/grpc/agent.py b/src/isolate/connections/grpc/agent.py index b9550bd..c45f17c 100644 --- a/src/isolate/connections/grpc/agent.py +++ b/src/isolate/connections/grpc/agent.py @@ -22,6 +22,8 @@ from isolate.connections.grpc import definitions from isolate.connections.grpc.configuration import get_default_options from isolate.connections.grpc.interface import from_grpc +from isolate.logger import logger +from isolate.logs import LogLevel, LogSource @dataclass @@ -149,7 +151,7 @@ def send_object( definition = serialize_object(serialization_method, result) except SerializationError: if stringized_tb: - print(stringized_tb, file=sys.stderr) + logger.log(LogLevel.ERROR, stringized_tb, LogSource.BRIDGE) raise AbortException( "Error while serializing the execution result " f"(object of type {type(result)})." diff --git a/src/isolate/logger.py b/src/isolate/logger.py new file mode 100644 index 0000000..a30d1e0 --- /dev/null +++ b/src/isolate/logger.py @@ -0,0 +1,17 @@ +import json + + +# NOTE: we probably should've created a proper `logging.getLogger` here, +# but it handling `source` would be not trivial, so we are better off +# just keeping it simple for now. +class IsolateLogger: + def log(self, level, message, source): + record = { + "isolate_source": source.name, + "level": level.name, + "message": message, + } + print(json.dumps(record)) + + +logger = IsolateLogger()