| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- from __future__ import annotations
- import logging
- import sys
- LEVELS = {
- 0: logging.CRITICAL,
- 1: logging.ERROR,
- 2: logging.WARNING,
- 3: logging.INFO,
- 4: logging.DEBUG,
- 5: logging.NOTSET,
- }
- MAX_LEVEL = max(LEVELS.keys())
- LOGGER = logging.getLogger()
- def setup_report(verbosity: int, show_pid: bool = False) -> int: # noqa: FBT002
- _clean_handlers(LOGGER)
- verbosity = min(verbosity, MAX_LEVEL) # pragma: no cover
- level = LEVELS[verbosity]
- msg_format = "%(message)s"
- if level <= logging.DEBUG:
- locate = "module"
- msg_format = f"%(relativeCreated)d {msg_format} [%(levelname)s %({locate})s:%(lineno)d]"
- if show_pid:
- msg_format = f"[%(process)d] {msg_format}"
- formatter = logging.Formatter(msg_format)
- stream_handler = logging.StreamHandler(stream=sys.stdout)
- stream_handler.setLevel(level)
- LOGGER.setLevel(logging.NOTSET)
- stream_handler.setFormatter(formatter)
- LOGGER.addHandler(stream_handler)
- level_name = logging.getLevelName(level)
- LOGGER.debug("setup logging to %s", level_name)
- logging.getLogger("distlib").setLevel(logging.ERROR)
- return verbosity
- def _clean_handlers(log: logging.Logger) -> None:
- for log_handler in list(log.handlers): # remove handlers of libraries
- log.removeHandler(log_handler)
- __all__ = [
- "LEVELS",
- "MAX_LEVEL",
- "setup_report",
- ]
|