# Based on: https://stackoverflow.com/a/72735401/13452914 import logging import sys from loguru import logger class InterceptHandler(logging.Handler): """ Add logging handler to augment python stdlib logging. Logs which would otherwise go to stdlib logging are redirected through loguru. """ @logger.catch(default=True, onerror=lambda _: sys.exit(1)) def emit(self, record): # Get corresponding Loguru level if it exists. try: level = logger.level(record.levelname).name except ValueError: level = record.levelno # Find caller from where originated the logged message. frame, depth = sys._getframe(6), 6 while frame and frame.f_code.co_filename == logging.__file__: frame = frame.f_back depth += 1 logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage())