| """ | |
| Logging support for make_layout. | |
| """ | |
| __author__ = "Steve Dower <steve.dower@python.org>" | |
| __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 |