mirror of
https://github.com/trushildhokiya/allininx-2.git
synced 2025-03-15 14:28:39 +00:00
64 lines
1.8 KiB
Python
64 lines
1.8 KiB
Python
import logging
|
|
import sys
|
|
from typing import Union
|
|
|
|
from loguru import logger
|
|
|
|
from reworkd_platform.settings import settings
|
|
|
|
|
|
class InterceptHandler(logging.Handler):
|
|
"""
|
|
Default handler from examples in loguru documentation.
|
|
|
|
This handler intercepts all log requests and
|
|
passes them to loguru.
|
|
|
|
For more info see:
|
|
https://loguru.readthedocs.io/en/stable/overview.html#entirely-compatible-with-standard-logging
|
|
"""
|
|
|
|
def emit(self, record: logging.LogRecord) -> None: # pragma: no cover
|
|
"""
|
|
Propagates logs to loguru.
|
|
|
|
:param record: record to log.
|
|
"""
|
|
try:
|
|
level: Union[str, int] = logger.level(record.levelname).name
|
|
except ValueError:
|
|
level = record.levelno
|
|
|
|
# Find caller from where originated the logged message
|
|
frame, depth = logging.currentframe(), 2
|
|
while frame.f_code.co_filename == logging.__file__:
|
|
frame = frame.f_back # type: ignore
|
|
depth += 1
|
|
|
|
logger.opt(depth=depth, exception=record.exc_info).log(
|
|
level,
|
|
record.getMessage(),
|
|
)
|
|
|
|
|
|
def configure_logging() -> None: # pragma: no cover
|
|
"""Configures logging."""
|
|
intercept_handler = InterceptHandler()
|
|
|
|
logging.basicConfig(handlers=[intercept_handler], level=logging.NOTSET)
|
|
|
|
for logger_name in logging.root.manager.loggerDict:
|
|
if logger_name.startswith("uvicorn."):
|
|
logging.getLogger(logger_name).handlers = []
|
|
|
|
# change handler for default uvicorn logger
|
|
logging.getLogger("uvicorn").handlers = [intercept_handler]
|
|
logging.getLogger("uvicorn.access").handlers = [intercept_handler]
|
|
|
|
# set logs output, level and format
|
|
logger.remove()
|
|
logger.add(
|
|
sys.stdout,
|
|
level=settings.log_level,
|
|
)
|