40 lines
918 B
Python
40 lines
918 B
Python
import inspect
|
|
from loguru import logger
|
|
|
|
import logging
|
|
from logging import Handler, LogRecord
|
|
|
|
|
|
class InterceptHandler(Handler):
|
|
|
|
def emit(self, record: LogRecord):
|
|
|
|
try:
|
|
level = logger.level(record.levelname).name
|
|
except ValueError:
|
|
level = record.levelno
|
|
|
|
frame, depth = inspect.currentframe(), 0
|
|
|
|
while frame and (depth == 0 or 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()
|
|
)
|
|
|
|
|
|
def setup_logging():
|
|
|
|
loggers = (
|
|
logging.getLogger(name)
|
|
for name in logging.root.manager.loggerDict
|
|
if name.startswith("uvicorn.")
|
|
)
|
|
|
|
for uvicorn_logger in loggers:
|
|
uvicorn_logger.handlers = []
|
|
|
|
logging.getLogger("uvicorn").handlers = [InterceptHandler()]
|