Source code for clusterking.util.log

#!/usr/bin/env python3

"""Defines an easy function to set up a logger. """

import logging
import os

try:
    import colorlog
except ImportError:
    colorlog = None

CLUSTERKING_LOGLEVEL_ENV = "CLUSTERKING_LOG_LEVEL"


[docs]def get_logger(name="Logger", level=logging.WARNING, sh_level=logging.WARNING): """Sets up a logging.Logger. If the colorlog module is available, the logger will use colors, otherwise it will be in b/w. The colorlog module is available at https://github.com/borntyping/python-colorlog but can also easily be installed with e.g. 'sudo pip3 colorlog' or similar commands. Args: name: name of the logger level: General logging level sh_level: Logging level of stream handler Returns: Logger """ if colorlog: _logger = colorlog.getLogger(name) else: _logger = logging.getLogger(name) if _logger.handlers: # the logger already has handlers attached to it, even though # we didn't add it ==> logging.get_logger got us an existing # logger ==> we don't need to do anything return _logger _logger.setLevel(level) if os.environ.get(CLUSTERKING_LOGLEVEL_ENV, False): _logger.setLevel(int(os.environ.get(CLUSTERKING_LOGLEVEL_ENV))) if colorlog is not None: sh = colorlog.StreamHandler() log_colors = { "DEBUG": "cyan", "INFO": "green", "WARNING": "yellow", "ERROR": "red", "CRITICAL": "red", } formatter = colorlog.ColoredFormatter( "%(log_color)s%(name)s:%(levelname)s:%(message)s", log_colors=log_colors, ) else: # no colorlog available: sh = logging.StreamHandler() formatter = logging.Formatter("%(name)s:%(levelname)s:%(message)s") sh.setFormatter(formatter) sh.setLevel(sh_level) _logger.addHandler(sh) if colorlog is None: _logger.debug("Module colorlog not available. Log will be b/w.") return _logger
[docs]def set_global_log_level(level=logging.INFO): names = list(logging.root.manager.loggerDict.keys()) names.append("DFMD") loggers = [logging.getLogger(name) for name in names] for logger in loggers: logger.setLevel(level) os.environ[CLUSTERKING_LOGLEVEL_ENV] = str(logging.WARNING)
if __name__ == "__main__": # Test the color scheme for the logger. lg = get_logger("test") lg.debug("Test debug message") lg.info("Test info message") lg.warning("Test warning message") lg.error("Test error message") lg.critical("Test critical message")