import logging import enum def _build_logger() -> tuple[logging.Logger, logging.Handler]: # Create a new logger which is independent with Flask logger = logging.getLogger("my_console_logger") # Avoid message was propagated to root logger or captured by Flask logger. logger.propagate = False # Set initial level. logger.setLevel(logging.INFO) # Create StreamHandler to output into stderr. console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) # Set format for it. formatter = logging.Formatter("[%(levelname)s] %(message)s") console_handler.setFormatter(formatter) # Add handler logger.addHandler(console_handler) return (logger, console_handler) (LOGGER, CONSOLE_HANDLER) = _build_logger() class LoggerLevel(enum.IntEnum): DEBUG = enum.auto() INFO = enum.auto() def set_level(level: LoggerLevel) -> None: logging_level: int = logging.INFO match level: case LoggerLevel.DEBUG: logging_level = logging.DEBUG case LoggerLevel.INFO: logging_level = logging.INFO LOGGER.setLevel(logging_level) CONSOLE_HANDLER.setLevel(logging_level)