Source code for PyMAIA.utils.log_utils

import argparse
import logging
from argparse import ArgumentParser
from typing import Dict, Union

import coloredlogs

__VERBOSITY_GRANULARITY__ = 2

LOG_FMT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"

# define custom log levels
DEBUG = logging.DEBUG
DEBUG2 = DEBUG - 2
DEBUG4 = DEBUG - 4
DEBUG6 = DEBUG - 6
WARN = logging.WARN
INFO = logging.INFO
# add levels to the 'DEBUG' group (i.e. same coloring)
for lvl_value in [DEBUG2, DEBUG4, DEBUG6]:
    logging.addLevelName(lvl_value, "DEBUG")


[docs] def setup_logging(level: Union[str, int] = "DEBUG", fmt: str = LOG_FMT): coloredlogs.install(level=level, fmt=fmt)
[docs] def get_logger(name: str = "", level: Union[str, int] = None, fmt: str = LOG_FMT) -> logging.Logger: """Get a logger and setup colored logging if level is provided.""" if level is not None: setup_logging(level=level, fmt=fmt) logger = logging.getLogger(name) return logger
[docs] def add_verbosity_options_to_argparser(p: ArgumentParser): gp = p.add_mutually_exclusive_group(required=False) gp.add_argument( "-v", "--verbose", required=False, action="count", help="Enable verbose output in terminal. Add multiple times to increase verbosity.", # noqa: E501 ) gp.add_argument( "-q", "--silent", required=False, action="count", help="Suppress most log outputs in terminal.", )
[docs] def log_lvl_from_verbosity_args(args: Dict) -> int: if args["verbose"]: return logging.DEBUG - __VERBOSITY_GRANULARITY__ * (args["verbose"] - 1) # noqa: 501 elif args["silent"]: return logging.WARN else: return logging.INFO
[docs] def str2bool(v): if isinstance(v, bool): return v if v.lower() in ("yes", "true", "t", "y", "1"): return True elif v.lower() in ("no", "false", "f", "n", "0"): return False else: raise argparse.ArgumentTypeError("Boolean value expected.")