Source code for pyzeta.framework.pyzeta_logging.loggable
"""
Module providing a simple mixin class which enables logging functionality.
Authors:\n
- Philipp Schuette\n
"""
from typing import Protocol
from pyzeta.framework.ioc.container_provider import ContainerProvider
from pyzeta.framework.pyzeta_logging.log_levels import LogLevel
from pyzeta.framework.pyzeta_logging.log_manager import LogManager
from pyzeta.framework.pyzeta_logging.logger_facade import PyZetaLogger
from pyzeta.framework.settings.settings_service import SettingsService
[docs]
class Loggable(Protocol):
"Mixin for combination with classes which support logging."
__slots__ = ("_logger",)
_logger: PyZetaLogger
@property
def logger(self) -> PyZetaLogger:
"""
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"):
settingsService = ContainerProvider.getContainer().tryResolve(
SettingsService
)
self._logger = LogManager.initLogger(
self.__module__.rsplit(".", maxsplit=1)[-1],
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)