Make sure in log that adding handlers only works before logging is initialized

For future: if we add handlers later, the queue / logger must be re-intialized
This commit is contained in:
Clemens Schwaighofer
2025-07-11 15:50:17 +09:00
parent 3f9f2ceaac
commit 6902768fed
4 changed files with 42 additions and 7 deletions

View File

@@ -126,6 +126,7 @@ class Log:
self.log_queue: 'Queue[str] | None' = None
self.listener: logging.handlers.QueueListener | None = None
self.logger: logging.Logger | None = None
# setup handlers
# NOTE if console with color is set first, some of the color formatting is set
@@ -219,6 +220,10 @@ class Log:
"""
if self.handlers.get(handler_name):
return False
if self.listener is not None or self.logger is not None:
raise ValueError(
f"Cannot add handler {handler_name}: {handler.get_name()} because logger is already running"
)
# TODO: handler must be some handler type, how to check?
self.handlers[handler_name] = handler
return True
@@ -360,6 +365,8 @@ class Log:
*args (object): arguments for msg
extra: Mapping[str, object] | None: extra arguments for the formatting if needed
"""
if self.logger is None:
raise ValueError('Logger is not yet initialized')
self.logger.log(LoggingLevel.EXCEPTION.value, msg, *args, exc_info=True, extra=extra)
# MARK: break line
@@ -370,6 +377,8 @@ class Log:
Keyword Arguments:
info {str} -- _description_ (default: {"BREAK"})
"""
if self.logger is None:
raise ValueError('Logger is not yet initialized')
self.logger.info("[%s] %s>", info, self.SPACER_CHAR * self.SPACER_LENGTH)
# MARK: queue handling
@@ -432,13 +441,15 @@ class Log:
self.handlers[handler_name].setLevel(log_level.name)
return True
except IndexError:
self.logger.error('Handler %s not found, cannot change log level', handler_name)
if self.logger:
self.logger.error('Handler %s not found, cannot change log level', handler_name)
return False
except AttributeError:
self.logger.error(
'Cannot change to log level %s for handler %s, log level invalid',
LoggingLevel.name, handler_name
)
if self.logger:
self.logger.error(
'Cannot change to log level %s for handler %s, log level invalid',
LoggingLevel.name, handler_name
)
return False
def get_log_level(self, handler_name: str) -> LoggingLevel: