""" Logging support for make_layout. """ __author__ = "Steve Dower " __version__ = "3.8" import logging import sys __all__ = [] LOG = None HAS_ERROR = False def public(f): __all__.append(f.__name__) return f @public def configure_logger(ns): global LOG if LOG: return LOG = logging.getLogger("make_layout") LOG.level = logging.DEBUG if ns.v: s_level = max(logging.ERROR - ns.v * 10, logging.DEBUG) f_level = max(logging.WARNING - ns.v * 10, logging.DEBUG) else: s_level = logging.ERROR f_level = logging.INFO handler = logging.StreamHandler(sys.stdout) handler.setFormatter(logging.Formatter("{levelname:8s} {message}", style="{")) handler.setLevel(s_level) LOG.addHandler(handler) if ns.log: handler = logging.FileHandler(ns.log, encoding="utf-8", delay=True) handler.setFormatter( logging.Formatter("[{asctime}]{levelname:8s}: {message}", style="{") ) handler.setLevel(f_level) LOG.addHandler(handler) class BraceMessage: def __init__(self, fmt, *args, **kwargs): self.fmt = fmt self.args = args self.kwargs = kwargs def __str__(self): return self.fmt.format(*self.args, **self.kwargs) @public def log_debug(msg, *args, **kwargs): return LOG.debug(BraceMessage(msg, *args, **kwargs)) @public def log_info(msg, *args, **kwargs): return LOG.info(BraceMessage(msg, *args, **kwargs)) @public def log_warning(msg, *args, **kwargs): return LOG.warning(BraceMessage(msg, *args, **kwargs)) @public def log_error(msg, *args, **kwargs): global HAS_ERROR HAS_ERROR = True return LOG.error(BraceMessage(msg, *args, **kwargs)) @public def log_exception(msg, *args, **kwargs): global HAS_ERROR HAS_ERROR = True return LOG.exception(BraceMessage(msg, *args, **kwargs)) @public def error_was_logged(): return HAS_ERROR