Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 26 additions & 12 deletions src/main/python/systemds/context/systemds_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class SystemDSContext(object):
_log: logging.Logger
__stdout: Queue = None
__stderr: Queue = None
_logging_initialized = False

def __init__(
self,
Expand Down Expand Up @@ -779,21 +780,34 @@ def __setup_logging(self, level: int, py4j_level: int):
:param level: The SystemDS logging part logging level.
:param py4j_level: The Py4J logging level.
"""
logging.basicConfig()
# Set py4j level every time
py4j = logging.getLogger("py4j.java_gateway")
py4j.setLevel(py4j_level)
py4j.propagate = False

if not SystemDSContext._logging_initialized:
# Add handler only once
logging.basicConfig()

root_logger = logging.getLogger(self.__class__.__name__)
root_logger.handlers.clear()

f_handler = logging.StreamHandler()
f_handler.setLevel(logging.NOTSET)
f_handler.setFormatter(
logging.Formatter("%(asctime)s %(levelname)s %(name)s: %(message)s", "%y/%m/%d %H:%M:%S")
)

root_logger.addHandler(f_handler)
root_logger.propagate = False

SystemDSContext._logging_initialized = True

# Per-instance logger setup
self._log = logging.getLogger(self.__class__.__name__)
f_handler = logging.StreamHandler()
f_handler.setLevel(level)
f_format = logging.Formatter(
"%(asctime)s - SystemDS- %(levelname)s - %(message)s"
self._log.setLevel(level)
self._log.debug(
"Logging setup done (SystemDS level: %s, Py4J level: %s)",
logging.getLevelName(level),
logging.getLevelName(py4j_level),
)
f_handler.setFormatter(f_format)
self._log.addHandler
# avoid the logger to call loggers above.
self._log.propagate = False
# Reset all handlers to only this new handler.
self._log.handlers = [f_handler]
self._log.debug("Logging setup done")
46 changes: 45 additions & 1 deletion src/main/python/tests/basics/test_context_creation.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,57 @@

import unittest
import logging
import io
import sys
from contextlib import redirect_stdout, redirect_stderr

from systemds.context import SystemDSContext


class TestContextCreation(unittest.TestCase):

def test_random_port_debug(self):
SystemDSContext._logging_initialized = False

stderr_buffer = io.StringIO()

with redirect_stderr(stderr_buffer):
sds1 = SystemDSContext(logging_level=10)
sds1.close()

err = stderr_buffer.getvalue()
print("Captured STDERR:\n", err)
print("END OF STDERR\n")

self.assertIn("DEBUG SystemDSContext: Logging setup done", err)

def test_random_port_debug2(self):
SystemDSContext._logging_initialized = False

stderr_buffer = io.StringIO()

with redirect_stderr(stderr_buffer):
sds1 = SystemDSContext()
sds1.close()

err = stderr_buffer.getvalue()
print("\nCaptured STDERR (ctx1):\n", err)
print("END OF STDERR\n")

# clear the buffer
stderr_buffer.seek(0)
stderr_buffer.truncate(0)


sds2 = SystemDSContext(logging_level=10)
sds2.close()

err = stderr_buffer.getvalue()
print("\nCaptured STDERR (ctx2):\n", err)
print("END OF STDERR\n")

self.assertIn("DEBUG SystemDSContext: Logging setup done", err)

def test_random_port(self):
sds1 = SystemDSContext()
sds1.close()
Expand Down Expand Up @@ -61,6 +106,5 @@ def test_create_multiple_context(self):
c.close()
d.close()


if __name__ == "__main__":
unittest.main(exit=False)
Loading