import logging
import sys
from loguru import logger
from ..core.settings import settings
def configure_logger() -> None:
class Formatter:
def __init__(self):
self.padding = 0
self.minimal_fmt = (
"{time:YYYY-MM-DD HH:mm:ss.SS} |"
" {level} | {message}\n"
)
if settings.debug:
self.fmt = (
"{time:YYYY-MM-DD HH:mm:ss.SS} | {level:"
" <4} |"
" {name}:{function}:{line}"
" | {message}\n"
)
else:
self.fmt = self.minimal_fmt
def format(self, record):
function = "{function}".format(**record)
if function == "emit": # uvicorn logs
return self.minimal_fmt
return self.fmt
class InterceptHandler(logging.Handler):
def emit(self, record):
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
logger.log(level, record.getMessage())
logger.remove()
log_level = settings.log_level
if settings.debug and log_level == "INFO":
log_level = "DEBUG"
formatter = Formatter()
logger.add(sys.stderr, level=log_level, format=formatter.format)
logging.getLogger("uvicorn").handlers = [InterceptHandler()]
logging.getLogger("uvicorn.access").handlers = [InterceptHandler()]