import logging from pathlib import Path from typing import Optional LOGGER_NAME = "serato_doctor" LOG_FORMAT = "%(asctime)s %(levelname)s %(message)s" def configure_logging( verbose: bool = False, log_file: Optional[Path] = None ) -> logging.Logger: """Configure isolated application logging and return the project logger.""" logger = logging.getLogger(LOGGER_NAME) logger.setLevel(logging.DEBUG) logger.propagate = False for handler in logger.handlers[:]: handler.close() logger.removeHandler(handler) formatter = logging.Formatter(LOG_FORMAT) if verbose: console = logging.StreamHandler() console.setLevel(logging.DEBUG) console.setFormatter(formatter) logger.addHandler(console) if log_file is not None: file_handler = logging.FileHandler(log_file, encoding="utf-8") file_handler.setLevel(logging.INFO) file_handler.setFormatter(formatter) logger.addHandler(file_handler) if not logger.handlers: logger.addHandler(logging.NullHandler()) return logger