Source code for stix2generator.logging

import logging
import logging.config


# custom more-verbose-than-debug level, for extra verbosity.
EXTRA_VERBOSE = 5


def _detect_top_level_module_name():
    """
    Simple function to try to auto-detect the top-level module name, based
    on the name of this module.  This can be used to name a logger.  Hopefully
    this makes it adapt to module refactoring; we don't have to hard-code
    anything.  I anticipate that all logging in this library will be done via
    loggers named after the module hierarchy, so we can affect all of them
    as a group this way.

    :return: The top level module name
    """
    dot_idx = __name__.find(".")

    if dot_idx == -1:
        top_level_module = __name__
    else:
        top_level_module = __name__[:dot_idx]

    return top_level_module


[docs]def config_logging(verbosity_count): """ Configure logging for commandline scripts. Library code should not configure logging. :param verbosity_count: The count of "-v"s on the commandline, or None """ if verbosity_count is None or verbosity_count == 0: log_level = logging.INFO elif verbosity_count == 1: log_level = logging.DEBUG else: log_level = EXTRA_VERBOSE config = { "version": 1, "formatters": { "message_only": { "format": "%(message)s" } }, "handlers": { "console": { "class": "logging.StreamHandler", "formatter": "message_only" } }, "disable_existing_loggers": False } logger_config = { "level": log_level, "handlers": ["console"] } # In addition to changing the log level, if extra verbosity is # selected, configure the root handler so that all libs will show # logging. Otherwise, just configure a logger for this library. if log_level == EXTRA_VERBOSE: config["root"] = logger_config else: top_level_module = _detect_top_level_module_name() config["loggers"] = { top_level_module: logger_config } logging.config.dictConfig(config)