import logging from pathlib import Path from logwatcher.config import DATETIME_FORMAT def _setup_formatter( format: str = "[%(asctime)s] - %(levelname)s: %(message)s", datefmt: str = DATETIME_FORMAT, ) -> logging.Formatter: return logging.Formatter(fmt=format, datefmt=datefmt) def _setup_handler( formatter: logging.Formatter, level: int, filename: Path | None = None ) -> logging.Handler: handler: logging.Handler if filename: handler = logging.FileHandler(filename=filename, encoding="utf-8") else: handler = logging.StreamHandler() handler.setLevel(level) handler.setFormatter(formatter) return handler def setup_logging( formatter: logging.Formatter | None = None, file_path: Path = Path("output/logs/logwatcher.log"), verbose: bool = False, ) -> logging.Logger: """Create a new instance of Logger named 'logger' customized for the logwatcher package. The format display in order the time, the level of log and the log message The logs are only redirect in the standard output. """ _formatter = formatter if formatter else _setup_formatter() if verbose: standard_output = _setup_handler(_formatter, logging.DEBUG) else: standard_output = _setup_handler(_formatter, logging.WARNING) file_output = _setup_handler(_formatter, logging.DEBUG, file_path) root = logging.getLogger() root.setLevel(logging.DEBUG) root.addHandler(standard_output) root.addHandler(file_output) logger = logging.getLogger("logwatcher") logger.setLevel(logging.NOTSET) # silent the other logs logging.getLogger("exchangelib").setLevel(logging.WARNING) return logger