# 日志与可观测性
use_actuator(router) 提供以下运维端点:
| 路径 | 行为 |
|---|---|
/actuator/health/detail | 健康检查,失败 HTTP 503 |
/actuator/health/readiness | hosted services 完成启动后返回 up,异常/停机 HTTP 503 |
/actuator/health/liveness | 进程存活 |
/actuator/prometheus | 请求计数和耗时分布,按路由模板聚合 |
/docs、/openapi.json | FastAPI 原生接口文档 |
独立 use_health(router, {"database": check_db}) 支持自定义同步/异步检查和超时。
默认请求中间件生成/透传 X-Request-ID、记录访问耗时、回收请求作用域,并把未处理异常转换为不含异常堆栈的 JSON 500。日志使用标准 Python logging。
安装带 jwt 组件的框架依赖后,使用 yuanboot.web.security.JwtBearer 作为 FastAPI Security 依赖验证 JWT,详见服务路由。
# 统一日志与启动信息
宿主默认启用日志,业务 logging.getLogger(__name__)、框架和服务器日志使用统一配置。
启动时输出 yuanboot-python 版本、Copyright (c) 2026 jackson liang、MIT 许可、应用名、PID 和运行环境。
文本日志默认 log_type: zap,可选 logrus;json: true 切换到结构化 JSON。
启动控制台显示蓝色 yuanboot logo、绿色标题和启动提示,版本、PID、应用名、环境使用蓝色,路径使用黄色,运行模式提示使用红色。
color: auto 自动识别终端和 PyCharm,可设 always 强制颜色或 never 关闭;自动模式遵循 NO_COLOR 和 FORCE_COLOR。
banner: false 关闭 logo。文件日志始终不输出框架颜色码;JSON 模式省略多行 logo,保留结构化启动日志和版权信息。
yuanboot:
logging:
level: INFO
log_type: zap
color: auto
banner: true
json: false
console: true
file: ./logs/application.log
max_bytes: 10485760
backup_count: 5
loggers:
sqlalchemy.engine: WARNING
zap 文本格式(字段间为 Tab):
[yuanboot-nio-123-456] 2026/10/24 20:00:00.12 INFO orders/service.py:42 order created request_id=order-123
logrus 文本格式:
2026/10/24 20:00:00.12 - [yuanboot-nio-123-456] - [INFO] order created level=INFO request_id=order-123
时间使用本地时区,保留百分秒;前缀包含 PID 和 Python 线程 ID。 访问日志记录状态、毫秒耗时、Host、方法、路径和 Request ID;请求正文不自动写入日志。 控制台与轮转文件使用相同格式,异常保留堆栈,额外字段中的密码和令牌会脱敏。 日志配置作用于当前进程,宿主关闭时释放处理器并恢复先前的日志配置。
# Swagger 版权信息
默认 /docs 与 /openapi.json 包含框架版本、版权、MIT 许可及框架链接。
业务可通过 WebHostBuilder(title=..., version=..., description=..., contact=..., license_info=...)
设置业务文档元数据;业务描述后附加独立的框架版权说明。
自定义 docs_url、代理路径和禁用文档的 FastAPI 选项继续生效。
# 请求追踪
默认请求管道会生成或透传 X-Request-ID,并将它写入响应头和访问日志。调用方可在请求中携带同一 ID,便于关联一次业务调用:
curl -i -H 'X-Request-ID: order-123' http://127.0.0.1:8080/info
Request ID 允许 1–128 位字母、数字、下划线、点、冒号和短横线,非法值会被替换。业务可通过 HttpContext.request_id 读取当前值;调用下游时需显式传递该请求头。它用于日志关联,完整的分布式链路采集需按项目接入相应工具。
# Prometheus 采集
在 Prometheus 配置中添加 Web 服务地址:
scrape_configs:
- job_name: orders
metrics_path: /actuator/prometheus
static_configs:
- targets: ["orders:8080"]
将 orders:8080 替换为 Prometheus 能访问的服务地址。
请求计数和耗时按路由模板聚合;新增接口后可在指标端点查看实际序列。
# 部署后的检查
curl -f http://127.0.0.1:8080/actuator/health/readiness
curl -f http://127.0.0.1:8080/actuator/health/detail
readiness 用于确认宿主就绪,detail 用于查看已注册组件的健康状态。 反向代理、容器或负载均衡器可使用 readiness 决定是否向实例转发请求。