41 lines
1.1 KiB
Python
41 lines
1.1 KiB
Python
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
|