Source code for pi_portal.modules.configuration.logging.bases.base_logger
"""LoggerConfigurationBase class."""
import abc
import logging
from typing import ClassVar, Optional, Type
from pi_portal.modules.configuration import state
[docs]class LoggerConfigurationBase(abc.ABC):
"""Pi Portal base logging configuration."""
format_str: str
formatter: logging.Formatter
formatter_class: ClassVar[Type[logging.Formatter]]
handler: logging.Handler
handler_class: ClassVar[Type[logging.Handler]]
handler_log_file_path: Optional[str] = None
running_state: state.State
[docs] def __init__(self) -> None:
self.running_state = state.State()
self.level = self.running_state.log_level
[docs] def configure(
self,
log: logging.Logger,
log_file_path: Optional[str] = None,
) -> None:
"""Configure application logging.
:param log: The logger instance to configure.
:param log_file_path: An optional log file path to configure.
"""
log.setLevel(self.level)
log.handlers = []
self.formatter = self.configure_formatter()
self.handler_log_file_path = log_file_path
self.handler = self.configure_handler()
self.handler.setFormatter(self.formatter)
log.addHandler(self.handler)
[docs] @abc.abstractmethod
def configure_formatter(self) -> logging.Formatter:
"""Configure the logger's formatter class."""
[docs] @abc.abstractmethod
def configure_handler(self) -> logging.Handler:
"""Configure the logger's handler class."""