tao.chen
d2c87de32c
refactor(audit): fold audit logging into access_log, drop AuditMiddleware
按用户复查意见把审计折进 main.py 已有的 access_log 中间件,
少一个 middleware、让诊断与合规共用一个出口。
* 删 backend.audit.AuditMiddleware(user_id 解析搬到 main.py
的 _audit_user_id 模块级 helper,cookie/Bearer 头 + JWT
验签,失败/缺失一律 '-',全异常捕获不让审计拖死业务)。
* access_log 在 success 路径补 logger.bind(user_id, method,
path, status).info('audit');exception 路径同样补一条
status=500 的审计行,然后 re-raise 让全局 handler 转 500。
* 删 app.add_middleware(AuditMiddleware)。
* audit.py 只剩 _DailyFileSink / configure_audit_logging /
AUDIT_LOG_FORMAT,文件 sink 与 retention 清理逻辑不变。
* 测试改用 _AccessLogReplica 复制 access_log 审计契约(不
import main.py 避免触发 lifespan 里的 MySQL/engine 初始化),
删 3 个 middleware 单独 case,加 access_log 端到端 success /
5xx / 无 JWT 三个 case。