Skip to content
Snippets Groups Projects
Commit ea3f4deb authored by Christoph Schmidt's avatar Christoph Schmidt
Browse files

Log levels are now set correctly.

parent 8839cd8f
No related branches found
No related tags found
No related merge requests found
import logging
from PySide6.QtCore import Signal from PySide6.QtCore import Signal
import cmp import cmp
......
...@@ -24,8 +24,8 @@ class Form(QDialog): ...@@ -24,8 +24,8 @@ class Form(QDialog):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
child_con = ChildProcessControl3(self, internal_log=False, internal_log_level=logging.DEBUG) child_con = ChildProcessControl3(self, internal_log=False, internal_log_level=logging.INFO)
child_con.set_internal_log_level(logging.CRITICAL)
child_con.mp_finished.connect(self.updateUI) child_con.mp_finished.connect(self.updateUI)
......
...@@ -49,12 +49,14 @@ class CBase: ...@@ -49,12 +49,14 @@ class CBase:
""" """
if self._internal_logger is not None: if self._internal_logger is not None:
if enable: if enable:
self._internal_logger.disabled = False
self._internal_logger.info(f"Internal logger of {self.__class__.__name__} has been enabled.") self._internal_logger.info(f"Internal logger of {self.__class__.__name__} has been enabled.")
else: else:
self._internal_logger.warning(f"Internal logger of {self.__class__.__name__} has been disabled.") self._internal_logger.warning(f"Internal logger of {self.__class__.__name__} has been disabled.")
self._internal_logger.level = logging.ERROR self._internal_logger.disabled = True
else: else:
raise Exception("Can't enable internal logger. Internal logger not initialized") raise Exception("Can't enable internal logger. Internal logger not initialized")#
@property @property
def internal_log_level(self): def internal_log_level(self):
...@@ -80,8 +82,6 @@ class CBase: ...@@ -80,8 +82,6 @@ class CBase:
self._internal_logger.info(f"Internal log level of {self.__class__.__name__} has been set to CRITICAL.") self._internal_logger.info(f"Internal log level of {self.__class__.__name__} has been set to CRITICAL.")
else: else:
self._internal_logger.info(f"Internal log level of {self.__class__.__name__} has been set to {level}.") self._internal_logger.info(f"Internal log level of {self.__class__.__name__} has been set to {level}.")
self._internal_logger.setLevel(level) self._internal_logger.setLevel(level)
else: else:
raise Exception("Can't set internal log level. Internal logger not initialized") raise Exception("Can't set internal log level. Internal logger not initialized")
......
...@@ -15,18 +15,16 @@ from cmp.CBase import CBase ...@@ -15,18 +15,16 @@ from cmp.CBase import CBase
class CProcess(CBase, Process): class CProcess(CBase, Process):
# override the print function
def __init__(self, state_queue: Queue, cmd_queue: Queue, def __init__(self, state_queue: Queue, cmd_queue: Queue,
kill_flag, kill_flag,
internal_log: bool = False, internal_log, internal_log_level,
internal_log_level=logging.DEBUG,
*args, **kwargs): *args, **kwargs):
Process.__init__(self) Process.__init__(self)
self._internal_log_enabled_ = internal_log self._internal_log_enabled_ = internal_log
self._internal_log_level_ = internal_log_level self._internal_log_level_ = internal_log_level
self.logger = None self.logger = None
self.logger_handler = None self.logger_handler = None
...@@ -59,13 +57,15 @@ class CProcess(CBase, Process): ...@@ -59,13 +57,15 @@ class CProcess(CBase, Process):
self._internal_logger, self._internal_log_handler = self.create_new_logger( self._internal_logger, self._internal_log_handler = self.create_new_logger(
f"(cmp) {self.name}", f"(cmp) {self.name}",
logger_handler=logging.handlers.QueueHandler(self.state_queue)) logger_handler=logging.handlers.QueueHandler(self.state_queue))
self.internal_log_enabled = self._internal_log_enabled_
self.internal_log_level = self._internal_log_level_
self.logger, self.logger_handler = self.create_new_logger(f"{os.getpid()}({self.__class__.__name__})", self.logger, self.logger_handler = self.create_new_logger(f"{os.getpid()}({self.__class__.__name__})",
logger_handler=logging.handlers.QueueHandler( logger_handler=logging.handlers.QueueHandler(
self.state_queue)) self.state_queue))
self.internal_log_enabled = self._internal_log_enabled_
self.internal_log_level = self._internal_log_level_
self._internal_logger.debug(f"Child process {self.__class__.__name__} started.") self._internal_logger.debug(f"Child process {self.__class__.__name__} started.")
...@@ -106,7 +106,7 @@ class CProcess(CBase, Process): ...@@ -106,7 +106,7 @@ class CProcess(CBase, Process):
self._internal_logger.debug(f"Child process monitor {self.__class__.__name__} ended.") self._internal_logger.debug(f"Child process monitor {self.__class__.__name__} ended.")
def __del__(self): def __del__(self):
print(f"Child process {self.name} deleted.") #self.logger.warning(f"Child process {self.name} deleted.")
self.cmd_queue.close() self.cmd_queue.close()
self.state_queue.close() self.state_queue.close()
...@@ -127,6 +127,8 @@ class CProcess(CBase, Process): ...@@ -127,6 +127,8 @@ class CProcess(CBase, Process):
self.state_queue.put(result) self.state_queue.put(result)
@staticmethod @staticmethod
def register_signal(postfix=None, signal_name: str = None): def register_signal(postfix=None, signal_name: str = None):
_postfix = postfix.strip() if postfix is not None else None _postfix = postfix.strip() if postfix is not None else None
...@@ -161,6 +163,14 @@ class CProcess(CBase, Process): ...@@ -161,6 +163,14 @@ class CProcess(CBase, Process):
return register return register
@register_signal()
def set_internal_log_level(self, level):
self.internal_log_level = level
@register_signal()
def set_internal_log_enabled(self, enabled):
self.internal_log_enabled = enabled
@staticmethod @staticmethod
def setter(signal_same: str = None): def setter(signal_same: str = None):
def register(func): def register(func):
......
...@@ -20,8 +20,8 @@ from cmp.CBase import CBase ...@@ -20,8 +20,8 @@ from cmp.CBase import CBase
class CProcessControl(CBase, QObject): class CProcessControl(CBase, QObject):
on_exception_raised = Signal(object, name='on_exception_raised') on_exception_raised = Signal(object, name='on_exception_raised')
def __init__(self, parent: QObject = None, def __init__(self, parent: QObject = None,
signal_class: QObject = None, signal_class: QObject = None,
internal_log: bool = False, internal_log: bool = False,
...@@ -46,7 +46,6 @@ class CProcessControl(CBase, QObject): ...@@ -46,7 +46,6 @@ class CProcessControl(CBase, QObject):
self.cmd_queue = Queue() self.cmd_queue = Queue()
self.state_queue = Queue() self.state_queue = Queue()
# Thread manager for monitoring the state queue # Thread manager for monitoring the state queue
self.thread_manager = QThreadPool() self.thread_manager = QThreadPool()
...@@ -61,11 +60,11 @@ class CProcessControl(CBase, QObject): ...@@ -61,11 +60,11 @@ class CProcessControl(CBase, QObject):
self._internal_logger, self._internal_log_handler = self.create_new_logger(f"(cmp) {self.name}") self._internal_logger, self._internal_log_handler = self.create_new_logger(f"(cmp) {self.name}")
self.internal_log_enabled = internal_log self.internal_log_enabled = internal_log
self.internal_log_level = internal_log_level self.internal_log_level = internal_log_level
self.logger, self.logger_handler = self.create_new_logger(f"{self.__class__.__name__}({os.getpid()})") self.logger, self.logger_handler = self.create_new_logger(f"{self.__class__.__name__}({os.getpid()})")
self.on_exception_raised.connect(self.display_exception) self.on_exception_raised.connect(self.display_exception)
self.msg_box = QMessageBox() self.msg_box = QMessageBox()
# ================================================================================================================== # ==================================================================================================================
# #
# ================================================================================================================== # ==================================================================================================================
...@@ -90,6 +89,8 @@ class CProcessControl(CBase, QObject): ...@@ -90,6 +89,8 @@ class CProcessControl(CBase, QObject):
self._internal_logger.debug(f"Child process {self._child.name} created.") self._internal_logger.debug(f"Child process {self._child.name} created.")
self.thread_manager.start(self._monitor_result_state) self.thread_manager.start(self._monitor_result_state)
@property @property
def child(self): def child(self):
return self._child return self._child
...@@ -141,12 +142,11 @@ class CProcessControl(CBase, QObject): ...@@ -141,12 +142,11 @@ class CProcessControl(CBase, QObject):
self.msg_box.setDetailedText(e.traceback_short()) self.msg_box.setDetailedText(e.traceback_short())
self.msg_box.setStandardButtons(QMessageBox.Ok) self.msg_box.setStandardButtons(QMessageBox.Ok)
self.msg_box.show() self.msg_box.show()
self._internal_logger.error(f"Error executing {e.function_name} in {e.parent_name}: {e.exception}\n" self.logger.error(f"Error executing {e.function_name} in {e.parent_name}: {e.exception}\n"
f"{e.traceback()}") f"{e.traceback()}")
except Exception as e: except Exception as e:
self._internal_logger.error(f"Error while displaying exception: {e}") self._internal_logger.error(f"Error while displaying exception: {e}")
def execute_function(self, func: callable, signal: Signal = None): def execute_function(self, func: callable, signal: Signal = None):
self.register_function(signal)(func)(self) self.register_function(signal)(func)(self)
...@@ -168,7 +168,7 @@ class CProcessControl(CBase, QObject): ...@@ -168,7 +168,7 @@ class CProcessControl(CBase, QObject):
args = match.group(2).split(',') args = match.group(2).split(',')
return name, args return name, args
def get_signature(self: CProcessControl, *args, **kwargs): def get_signature(self, *args, **kwargs):
arguments = locals().copy() arguments = locals().copy()
arguments.pop("func") arguments.pop("func")
...@@ -205,6 +205,14 @@ class CProcessControl(CBase, QObject): ...@@ -205,6 +205,14 @@ class CProcessControl(CBase, QObject):
return register return register
@register_function()
def set_internal_log_level(self, level):
self.internal_log_level = level
@register_function()
def set_internal_log_enabled(self, enabled):
self.internal_log_enabled = enabled
def safe_exit(self, reason: str = ""): def safe_exit(self, reason: str = ""):
self._internal_logger.warning(f"Shutting down ProcessControl {os.getpid()}. Reason: {reason}") self._internal_logger.warning(f"Shutting down ProcessControl {os.getpid()}. Reason: {reason}")
self._child_kill_flag.value = 0 self._child_kill_flag.value = 0
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment