OncoLit: a multi-tenant oncology literature search, feed, and collaboration platform. Built with FastAPI + Vue 3 + PostgreSQL. Includes PubMed pipeline, drug approvals, AI summaries, and systematic review tools.
38 lines
1.2 KiB
Python
38 lines
1.2 KiB
Python
"""结构化日志配置 — structlog"""
|
|
|
|
import logging
|
|
|
|
import structlog
|
|
|
|
|
|
def setup_logging():
|
|
"""初始化 structlog,输出 JSON 格式到 stdout"""
|
|
structlog.configure(
|
|
processors=[
|
|
structlog.stdlib.add_log_level,
|
|
structlog.stdlib.PositionalArgumentsFormatter(),
|
|
structlog.processors.TimeStamper(fmt="iso"),
|
|
structlog.processors.StackInfoRenderer(),
|
|
structlog.processors.format_exc_info,
|
|
structlog.processors.UnicodeDecoder(),
|
|
structlog.dev.ConsoleRenderer() if False else structlog.processors.JSONRenderer(),
|
|
],
|
|
context_class=dict,
|
|
logger_factory=structlog.stdlib.LoggerFactory(),
|
|
wrapper_class=structlog.stdlib.BoundLogger,
|
|
cache_logger_on_first_use=True,
|
|
)
|
|
|
|
# 禁止 SQLAlchemy 细粒度日志
|
|
logging.getLogger("sqlalchemy.engine").setLevel(logging.WARNING)
|
|
logging.getLogger("sqlalchemy.pool").setLevel(logging.WARNING)
|
|
logging.getLogger("sqlalchemy.dialects").setLevel(logging.WARNING)
|
|
|
|
|
|
def get_logger(name: str = "scilit"):
|
|
return structlog.get_logger(name)
|
|
|
|
|
|
# 日志级别到函数映射,方便在端点中直接调用
|
|
log = get_logger()
|