Source code for pyzeal.pyzeal_logging.loggable

"""
Authors:\n
- Philipp Schuette\n
"""

from typing import Protocol

from pyzeal.pyzeal_logging.log_levels import LogLevel
from pyzeal.pyzeal_logging.log_manager import LogManager
from pyzeal.pyzeal_logging.logger_facade import PyZEALLogger
from pyzeal.settings.settings_service import SettingsService
from pyzeal.utils.service_locator import ServiceLocator


[docs] class Loggable(Protocol): """ Mixin for combination with classes which support logging, in particular changing the logging level. """ __slots__ = ("_logger",) _logger: PyZEALLogger @property def logger(self) -> PyZEALLogger: """ The logger instance associated with this Loggable class. Instance creation happens upon first property access. :returns: the logger of this class """ if not hasattr(self, "_logger"): self._logger = LogManager.initLogger( self.__module__.rsplit(".", maxsplit=1)[-1], ServiceLocator.tryResolve(SettingsService).logLevel, ) return self._logger
[docs] def setLevel(self, level: LogLevel) -> None: """ Set the log level. :param level: the new log level """ self.logger.setLevel(level=level.value)