def logstream(caplog): """ Prefixing is done at the final output. We have to intercept it. """ logger = logging.getLogger() handlers = list(logger.handlers) # Setup all log levels of sub-libraries. A sife-effect: the handlers are also added. configure(verbose=True) # Remove any stream handlers added in the step above. But keep the caplog's handlers. for handler in list(logger.handlers): if isinstance(handler, logging.StreamHandler) and handler.stream is sys.stderr: logger.removeHandler(handler) # Inject our stream-intercepting handler. stream = io.StringIO() handler = logging.StreamHandler(stream) formatter = ObjectPrefixingFormatter('prefix %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) try: with caplog.at_level(logging.DEBUG): yield stream finally: logger.removeHandler(handler) logger.handlers[:] = handlers # undo `configure()`
def logstream(caplog): """ Prefixing is done at the final output. We have to intercept it. """ logger = logging.getLogger() handlers = list(logger.handlers) configure(verbose=True) stream = io.StringIO() handler = logging.StreamHandler(stream) formatter = ObjectPrefixingFormatter('prefix %(message)s') handler.setFormatter(formatter) logger.addHandler(handler) try: with caplog.at_level(logging.DEBUG): yield stream finally: logger.removeHandler(handler) logger.handlers[:] = handlers # undo `configure()`