Skip to content

Commit 21aa002

Browse files
committed
[MINOR] PythonAPI: Fix for correct logging setup for debug
1 parent b7e101e commit 21aa002

File tree

2 files changed

+71
-13
lines changed

2 files changed

+71
-13
lines changed

src/main/python/systemds/context/systemds_context.py

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ class SystemDSContext(object):
6666
_log: logging.Logger
6767
__stdout: Queue = None
6868
__stderr: Queue = None
69+
_logging_initialized = False
6970

7071
def __init__(
7172
self,
@@ -779,21 +780,34 @@ def __setup_logging(self, level: int, py4j_level: int):
779780
:param level: The SystemDS logging part logging level.
780781
:param py4j_level: The Py4J logging level.
781782
"""
782-
logging.basicConfig()
783+
# Set py4j level every time
783784
py4j = logging.getLogger("py4j.java_gateway")
784785
py4j.setLevel(py4j_level)
785786
py4j.propagate = False
786787

788+
if not SystemDSContext._logging_initialized:
789+
# Add handler only once
790+
logging.basicConfig()
791+
792+
root_logger = logging.getLogger(self.__class__.__name__)
793+
root_logger.handlers.clear()
794+
795+
f_handler = logging.StreamHandler()
796+
f_handler.setLevel(logging.NOTSET)
797+
f_handler.setFormatter(
798+
logging.Formatter("%(asctime)s %(levelname)s %(name)s: %(message)s", "%y/%m/%d %H:%M:%S")
799+
)
800+
801+
root_logger.addHandler(f_handler)
802+
root_logger.propagate = False
803+
804+
SystemDSContext._logging_initialized = True
805+
806+
# Per-instance logger setup
787807
self._log = logging.getLogger(self.__class__.__name__)
788-
f_handler = logging.StreamHandler()
789-
f_handler.setLevel(level)
790-
f_format = logging.Formatter(
791-
"%(asctime)s - SystemDS- %(levelname)s - %(message)s"
808+
self._log.setLevel(level)
809+
self._log.debug(
810+
"Logging setup done (SystemDS level: %s, Py4J level: %s)",
811+
logging.getLevelName(level),
812+
logging.getLevelName(py4j_level),
792813
)
793-
f_handler.setFormatter(f_format)
794-
self._log.addHandler
795-
# avoid the logger to call loggers above.
796-
self._log.propagate = False
797-
# Reset all handlers to only this new handler.
798-
self._log.handlers = [f_handler]
799-
self._log.debug("Logging setup done")

src/main/python/tests/basics/test_context_creation.py

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,57 @@
2121

2222
import unittest
2323
import logging
24+
import io
25+
import sys
26+
from contextlib import redirect_stdout, redirect_stderr
2427

2528
from systemds.context import SystemDSContext
2629

2730

2831
class TestContextCreation(unittest.TestCase):
2932

33+
def test_random_port_debug(self):
34+
SystemDSContext._logging_initialized = False
35+
36+
stderr_buffer = io.StringIO()
37+
38+
with redirect_stderr(stderr_buffer):
39+
sds1 = SystemDSContext(logging_level=10)
40+
sds1.close()
41+
42+
err = stderr_buffer.getvalue()
43+
print("Captured STDERR:\n", err)
44+
print("END OF STDERR\n")
45+
46+
self.assertIn("DEBUG SystemDSContext: Logging setup done", err)
47+
48+
def test_random_port_debug2(self):
49+
SystemDSContext._logging_initialized = False
50+
51+
stderr_buffer = io.StringIO()
52+
53+
with redirect_stderr(stderr_buffer):
54+
sds1 = SystemDSContext()
55+
sds1.close()
56+
57+
err = stderr_buffer.getvalue()
58+
print("\nCaptured STDERR (ctx1):\n", err)
59+
print("END OF STDERR\n")
60+
61+
# clear the buffer
62+
stderr_buffer.seek(0)
63+
stderr_buffer.truncate(0)
64+
65+
66+
sds2 = SystemDSContext(logging_level=10)
67+
sds2.close()
68+
69+
err = stderr_buffer.getvalue()
70+
print("\nCaptured STDERR (ctx2):\n", err)
71+
print("END OF STDERR\n")
72+
73+
self.assertIn("DEBUG SystemDSContext: Logging setup done", err)
74+
3075
def test_random_port(self):
3176
sds1 = SystemDSContext()
3277
sds1.close()
@@ -61,6 +106,5 @@ def test_create_multiple_context(self):
61106
c.close()
62107
d.close()
63108

64-
65109
if __name__ == "__main__":
66110
unittest.main(exit=False)

0 commit comments

Comments
 (0)