日志统一

This commit is contained in:
zk
2026-04-03 11:35:12 +08:00
parent 7ac1e723a4
commit 602f226377
+26
View File
@@ -1,3 +1,4 @@
import logging
import os
import sys
@@ -67,4 +68,29 @@ def _setup_logger() -> logger.__class__:
return logger
class _InterceptHandler(logging.Handler):
"""将标准 logging 的日志转发到 Loguru"""
def emit(self, record: logging.LogRecord) -> None:
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
frame, depth = logging.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 _intercept_stdlib_logging() -> None:
"""拦截 SQLAlchemy、uvicorn 等标准 logging 输出,统一到 Loguru"""
intercept = _InterceptHandler()
for name in ("sqlalchemy.engine", "uvicorn", "uvicorn.access", "uvicorn.error"):
stdlib_logger = logging.getLogger(name)
stdlib_logger.handlers = [intercept]
stdlib_logger.propagate = False
log = _setup_logger()
_intercept_stdlib_logging()