@@ -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,22 +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-
783- logging .basicConfig ()
783+ # Set py4j level every time
784784 py4j = logging .getLogger ("py4j.java_gateway" )
785785 py4j .setLevel (py4j_level )
786786 py4j .propagate = False
787787
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 - SystemDS- %(levelname)s - %(message)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
788807 self ._log = logging .getLogger (self .__class__ .__name__ )
789808 self ._log .setLevel (level )
790- self ._log .handlers .clear ()
791-
792- f_handler = logging .StreamHandler ()
793- f_handler .setLevel (level )
794- f_handler .setFormatter (
795- logging .Formatter ("%(asctime)s - SystemDS- %(levelname)s - %(message)s" )
809+ self ._log .debug (
810+ "Logging setup done (SystemDS level: %s, Py4J level: %s)" ,
811+ logging .getLevelName (level ),
812+ logging .getLevelName (py4j_level ),
796813 )
797-
798- self ._log .addHandler (f_handler )
799- self ._log .propagate = False
800- self ._log .debug ("Logging setup done" )
0 commit comments