Source code for pi_portal.modules.configuration.logging.bases.base_logger

"""LoggerConfigurationBase class."""

import abc
import logging
from typing import Optional

from pi_portal.modules.configuration import state


[docs]class LoggerConfigurationBase(abc.ABC): """Pi Portal base logging configuration.""" format_str: str formatter: logging.Formatter running_state: state.State def __init__(self) -> None: self.running_state = state.State() self.level = self.running_state.log_level
[docs] def configure( self, log: logging.Logger, file_name: Optional[str] = None, ) -> None: """Configure application logging. :param log: The logger instance to configure. :param file_name: The path to write logs to, none for stdout. """ log.setLevel(self.level) self.configure_formatter() self.configure_handler(log, file_name)
[docs] def configure_handler( self, log: logging.Logger, file_name: Optional[str] ) -> None: """Configure the logger's handler. :param log: The logger instance to configure. :param file_name: The path to write logs to, none for stdout. """ log.handlers = [] handler: Optional[logging.Handler] if file_name is None: handler = logging.StreamHandler() else: handler = logging.FileHandler(file_name, delay=True) handler.setFormatter(self.formatter) log.addHandler(handler)
[docs] @abc.abstractmethod def configure_formatter(self) -> None: """Configure the logger's formatter."""