"""Logging=======Optimus makes usage of logging during its processes to inform user aboutwhat it is doing or errors that occured.To be more readable, its logger is configured to be colored using``colorlog`` package."""importloggingimportcolorlog
[docs]defset_loggers_level(names,level=logging.CRITICAL):""" Set a log level on multiple loggers. Arguments: names (list): A list of logger names to set level. Keyword Arguments: level (integer): Logging level to set on all given logger names. Default to value from ``logging.CRITICAL``. """foriteminnames:logging.getLogger(item).setLevel(level)
[docs]definit_logger(level,printout=True):""" Initialize app logger to configure its level/handler/formatter/etc.. Arguments: level (str): Level name (``debug``, ``info``, etc..). Keyword Arguments: printout (bool): If False, logs will never be outputed. Returns: logging.Logger: Application logger. """root_logger=logging.getLogger("optimus")root_logger.setLevel(level)# Redirect outputs to the void space, mostly for usage within unittestsifnotprintout:fromioimportStringIOdummystream=StringIO()handler=logging.StreamHandler(dummystream)# Standard output with colored messageselse:handler=logging.StreamHandler()handler.setFormatter(colorlog.ColoredFormatter("%(asctime)s - %(log_color)s%(message)s",datefmt="%H:%M:%S"))root_logger.addHandler(handler)returnroot_logger