58 lines
1.7 KiB
Python
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
|