Files
logwatcher/src/logwatcher/logging_config.py
T

58 lines
1.7 KiB
Python

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