| 44 | """Setup standard logging library interceptor to redirect to loguru""" |
| 45 | |
| 46 | class InterceptHandler(logging.Handler): |
| 47 | def emit(self, record: logging.LogRecord) -> None: |
| 48 | # Get corresponding Loguru level if it exists. |
| 49 | try: |
| 50 | level: str | int = logger.level(record.levelname).name |
| 51 | except ValueError: |
| 52 | level = record.levelno |
| 53 | |
| 54 | # Find caller from where originated the logged message. |
| 55 | frame, depth = inspect.currentframe(), 0 |
| 56 | while frame: |
| 57 | filename = frame.f_code.co_filename |
| 58 | is_logging = filename == logging.__file__ |
| 59 | is_frozen = "importlib" in filename and "_bootstrap" in filename |
| 60 | if depth > 0 and not (is_logging or is_frozen): |
| 61 | break |
| 62 | frame = frame.f_back |
| 63 | depth += 1 |
| 64 | |
| 65 | logger.opt(depth=depth, exception=record.exc_info).log(level, record.getMessage()) |
| 66 | |
| 67 | # Remove all existing handlers and add our interceptor |
| 68 | logging.basicConfig(handlers=[InterceptHandler()], level="INFO", force=True) |
no outgoing calls
no test coverage detected