Update central storage log config
This commit is contained in:
parent
8cae70a21f
commit
a33869b7fe
@ -3,7 +3,7 @@ from fastapi import FastAPI
|
|||||||
from fastapi.openapi.utils import get_openapi
|
from fastapi.openapi.utils import get_openapi
|
||||||
|
|
||||||
from webapi.providers import common
|
from webapi.providers import common
|
||||||
from webapi.providers import logger
|
from webapi.providers.logger import register_logger
|
||||||
from webapi.providers import router
|
from webapi.providers import router
|
||||||
from webapi.providers import database
|
from webapi.providers import database
|
||||||
from webapi.providers import scheduler
|
from webapi.providers import scheduler
|
||||||
@ -16,9 +16,9 @@ def create_app() -> FastAPI:
|
|||||||
|
|
||||||
app = FreeleapsApp()
|
app = FreeleapsApp()
|
||||||
|
|
||||||
|
register_logger()
|
||||||
register(app, exception_handler)
|
register(app, exception_handler)
|
||||||
register(app, database)
|
register(app, database)
|
||||||
register(app, logger)
|
|
||||||
register(app, router)
|
register(app, router)
|
||||||
register(app, scheduler)
|
register(app, scheduler)
|
||||||
register(app, common)
|
register(app, common)
|
||||||
|
|||||||
@ -1,53 +1,47 @@
|
|||||||
import logging
|
import logging
|
||||||
import sys
|
import sys
|
||||||
from loguru import logger
|
from loguru import logger as guru_logger
|
||||||
from common.config.log_settings import log_settings
|
|
||||||
|
|
||||||
|
|
||||||
def register(app=None):
|
def register_logger():
|
||||||
level = log_settings.LOG_LEVEL
|
print("📢 Setting up logging interception...")
|
||||||
file_path = log_settings.LOG_PATH
|
|
||||||
retention = log_settings.LOG_RETENTION
|
|
||||||
rotation = log_settings.LOG_ROTATION
|
|
||||||
|
|
||||||
# intercept everything at the root logger
|
# 🔴 **Ensure Uvicorn Logs Are Captured**
|
||||||
|
intercept_loggers = ["uvicorn", "uvicorn.access", "uvicorn.error", "fastapi"]
|
||||||
|
|
||||||
|
class InterceptHandler(logging.Handler):
|
||||||
|
def emit(self, record):
|
||||||
|
level = (
|
||||||
|
guru_logger.level(record.levelname).name
|
||||||
|
if guru_logger.level(record.levelname, None)
|
||||||
|
else record.levelno
|
||||||
|
)
|
||||||
|
frame, depth = logging.currentframe(), 2
|
||||||
|
while frame.f_code.co_filename == logging.__file__:
|
||||||
|
frame = frame.f_back
|
||||||
|
depth += 1
|
||||||
|
|
||||||
|
guru_logger.opt(depth=depth, exception=record.exc_info).log(
|
||||||
|
level,
|
||||||
|
f"[{record.name}] {record.getMessage()}",
|
||||||
|
)
|
||||||
|
|
||||||
|
# 🔴 **Replace Existing Loggers with Interception**
|
||||||
|
logging.root.handlers.clear()
|
||||||
|
logging.root.setLevel(logging.INFO)
|
||||||
logging.root.handlers = [InterceptHandler()]
|
logging.root.handlers = [InterceptHandler()]
|
||||||
logging.root.setLevel(level)
|
|
||||||
|
|
||||||
# remove every other logger's handlers
|
for logger_name in intercept_loggers:
|
||||||
# and propagate to root logger
|
logging_logger = logging.getLogger(logger_name)
|
||||||
for name in logging.root.manager.loggerDict.keys():
|
logging_logger.handlers.clear() # Remove Uvicorn default handlers
|
||||||
logging.getLogger(name).handlers = []
|
logging_logger.propagate = True # ✅ Ensure they propagate through Loguru
|
||||||
logging.getLogger(name).propagate = True
|
|
||||||
|
|
||||||
# configure loguru
|
# 🔴 **Redirect stdout/stderr to Loguru (Keep Green Timestamps)**
|
||||||
logger.add(sink=sys.stdout)
|
guru_logger.remove()
|
||||||
logger.add(sink=file_path, level=level, retention=retention, rotation=rotation)
|
guru_logger.add(
|
||||||
|
sys.stdout,
|
||||||
|
level="INFO",
|
||||||
|
format="<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | {level} | {message}",
|
||||||
|
)
|
||||||
|
|
||||||
logger.disable("pika.adapters")
|
print("✅ Logging interception complete. Logs are formatted and deduplicated!")
|
||||||
logger.disable("pika.connection")
|
|
||||||
logger.disable("pika.channel")
|
|
||||||
logger.disable("pika.callback")
|
|
||||||
logger.disable("pika.frame")
|
|
||||||
logger.disable("pika.spec")
|
|
||||||
logger.disable("aiormq.connection")
|
|
||||||
logger.disable("urllib3.connectionpool")
|
|
||||||
|
|
||||||
|
|
||||||
class InterceptHandler(logging.Handler):
|
|
||||||
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 = logging.currentframe(), 2
|
|
||||||
while 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()
|
|
||||||
)
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user