Source code for dynamo_consistency.logsetup

"""
The module that sets up logging for us
"""

import os
import logging

from .parser import OPTS as opts

LOG_FORMAT = '%(asctime)s:%(levelname)s:%(name)s: %(message)s'


if opts.DEBUG:
    logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT)
elif opts.INFO:
    logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
else:
    logging.basicConfig(format=LOG_FORMAT)


[docs]def change_logfile(*filenames): """ Changes the output file of all of the loggers. Creates any directories that are needed to hold the logs. :param filenames: The files to write new logs to """ new_hldrs = [] for name in filenames: logdir = os.path.dirname(name) if not os.path.exists(logdir): os.makedirs(logdir) fhdl = logging.FileHandler(name, 'a') fhdl.setFormatter(logging.Formatter(LOG_FORMAT)) new_hldrs.append(fhdl) parents = [] # Sort the loggers so that we come to the parents first for logger in \ sorted([logger for logger in logging.Logger.manager.loggerDict.values() if isinstance(logger, logging.Logger)], key=lambda logger: logger.name): # Don't reconfigure a logger with a parent if True in [logger.name.startswith(parent) for parent in parents]: continue parents.append(logger.name) hdlr_copy = list(logger.handlers) for hdlr in hdlr_copy: logger.removeHandler(hdlr) for fhdl in new_hldrs: logger.addHandler(fhdl)
[docs]def match_logs(source, targets): """ :param logging.Logger source: Logger that has handlers to use :param list targets: List of loggers that need handlers updated """ for logger in targets: for hdlr in list(logger.handlers): logger.removeHandler(hdlr) for hdlr in source.handlers: logger.addHandler(hdlr)