Source code for dial_core.utils.log.log

# vim: ft=python fileencoding=utf-8 sts=4 sw=4 et:

# pylint: disable=global-statement

"""Logger functions used to display debug and execution information."""


import logging
import logging.config
import sys
from io import StringIO
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    import argparse

FORMATTER = logging.Formatter(
    "%(asctime)s - %(name)s - %(levelname)s - %(message)s", "%H:%M:%S"
)

LOG_FILE = "dial.log"
LOG_STREAM = StringIO()

LOG_LEVEL = logging.INFO


[docs]def init_logs(args: "argparse.Namespace"): """ Initialize logging system. Defines the formatting and logging levels for all Logger objects. """ global LOG_LEVEL # Set specified log level try: LOG_LEVEL = getattr(logging, args.loglevel.upper()) except AttributeError: raise ValueError("Invalid log level: %s" % args.loglevel) # If debug flag, change log level to DEBUG if args.debug: LOG_LEVEL = logging.DEBUG # Configure root logger add_handler_to_root(__get_console_handler()) add_handler_to_root(__get_string_handler()) for name in logging.root.manager.loggerDict: # type: ignore logger = logging.getLogger(name) logger.setLevel(LOG_LEVEL) get_logger(__name__).debug("Logging system initialized.")
[docs]def get_log_level(): return LOG_LEVEL
[docs]def add_handler_to_root(handler: "logging.Handler"): """ Add a new handler to the logger defined as ROOT """ logging.getLogger().addHandler(handler)
[docs]def get_logger(logger_name: str) -> "logging.Logger": """ Configure and return a Logger with `logger_name` as name. """ logger = logging.getLogger(logger_name) logger.setLevel(LOG_LEVEL) return logger
def __get_console_handler() -> "logging.StreamHandler": """Returns a log handler that sends its output to the terminal (stdout).""" console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(FORMATTER) return console_handler def __get_string_handler() -> "logging.StreamHandler": """Returns a log handler that sends its output to a string.""" string_handler = logging.StreamHandler(LOG_STREAM) string_handler.setFormatter(FORMATTER) return string_handler