mirror of
https://github.com/GeWuYou/GFramework.git
synced 2026-05-06 16:16:44 +08:00
- 归档 Godot logging 合规收尾主题并保留验证结果 - 新增 Godot logging Core sink active topic 恢复入口 - 更新 public boot 索引和当前分支映射
6.3 KiB
6.3 KiB
Godot Logging Compliance Polish 跟踪
目标
继续把 GFramework.Godot.Logging 从“基础可用的 Godot 输出适配”收敛成“对齐 GodotLogger 优点、但保持
GFramework 自身日志抽象不分叉”的稳定宿主层,并为后续 Godot / Core 日志统一留下清晰恢复点。
完成状态
- 恢复点编号:
GODOT-LOGGING-COMPLIANCE-POLISH-RP-003 - 当前阶段:
已完成并归档 - 完成结论:
- 已补齐
GodotLog静态入口、延迟 logger 解析、配置自动发现与热重载 - 已让
GodotLoggerFactoryProvider对已缓存 logger 生效动态配置,而不是只在新建 logger 时读快照 - 已让
GodotLogger支持{properties}占位符,并把IStructuredLogger/LogContext属性落到 Godot 输出 - 已兼容
GodotLogger风格配置值,如Information/Critical - 已处理 PR #314 最新 AI review 中仍适用的 XML docs、热路径分配、结构化属性兜底、文档示例和 tracking 精简问题
- PR #314 已合并到
origin/main,当前主题从默认 boot 路径移入归档
- 已补齐
当前状态摘要
GFramework.Core仍是主日志框架;GFramework.Godot没有引入第二套业务日志 APIGFramework.Godot.Logging现在已经补上原GodotLogger项目最有价值的宿主便利层:GodotLogDeferredLogger- 配置文件自动发现
- 文件热重载
- 结构化属性渲染
- 本轮没有把
Microsoft.Extensions.Logging的ILoggingBuilder/ILoggerProvider生态原样搬入 GFramework AbstractLogger已支持动态最小级别提供器,为 Godot 配置热更新生效打通基础能力
当前活跃事实
- 本主题归档前由分支
feat/godot-logging-compliance-polish驱动,PR #314 合并后已从ai-plan/public/README.md的 active topic 映射移除 ai-libs/GodotLogger的 MIT 许可证已复制到third-party-licenses/GodotLogger/LICENSEGodotLog当前的配置发现顺序为:GODOT_LOGGER_CONFIG- 可执行目录
appsettings.json res://appsettings.json
GodotLog.Configure(...)仍要求在首次 materialize provider 前调用;延迟 logger 会避免static readonly字段过早锁死配置GodotLoggerFactoryProvider当前按 logger 名称缓存实例,但每次判定级别和写日志都会读取最新GodotLoggerSettings- Godot 模板默认已扩展为包含
{properties},因此结构化属性和LogContext会进入渲染结果 - 配置加载兼容两套级别命名:
- GFramework 风格:
Info/Fatal GodotLogger风格:Information/Critical
- GFramework 风格:
- 现有设计仍保留 UTC 时间戳语义,没有为了对齐原项目而默认切回本地时间
GodotLog.ConfigurationPath现在不会提前 materialize 全局配置源;GodotLog.Shutdown()可释放已创建配置源的 watcher- 配置 JSON 会先归一化模板和颜色字典,并拒绝未定义的数字
LogLevel GodotLogTemplate的模板缓存和分类格式缓存已改为有界并发缓存,避免热重载或动态 category 长期单向增长refactor-scripts/update-namespaces.py已移除本机绝对路径默认值,并会把文件处理失败汇总成非零退出码- PR #314 最新 review 中,GodotLog watcher 释放、热重载回调阻塞、配置归一化、数字
LogLevel校验、 模板缓存和脚本健壮性问题已在当前 head 验证为已处理;本轮只继续修仍适用的问题 - PR #314 最新 follow-up 中,
DeferredLogger格式化重载现在委托给 inner logger,GodotLogger默认 options provider 已改为构造时缓存,结构化属性会跳过空白 key 并使用 trimmed key
收尾风险
- 双入口生命周期风险:如果同一宿主同时混用
LoggerFactoryResolver.Provider与GodotLog,需要明确谁是最终默认 provider- 缓解措施:当前文档与实现都保留
GodotLog.UseAsDefaultProvider(),并继续把ArchitectureConfiguration方式写成默认推荐路径
- 缓解措施:当前文档与实现都保留
- Core / Godot 管线分离风险:Godot 侧虽然已有热重载与配置发现,但还没有变成 Core 可组合 appender
- 缓解措施:若后续重启本方向,应新建独立 topic 评估“Godot sink / appender 化”,不要在已归档主题继续扩张独立的 Godot logging 面
- 配置热重载的宿主差异风险:Godot 编辑器、导出包和测试宿主的文件系统语义不完全一致
- 缓解措施:active 入口先锁定 discovery / reload 语义,后续若遇到平台差异,再用定向回归和文档补充收口
GodotLog.ConfigurationPath的“不会 materialize”语义没有加入自动化测试- 缓解措施:直接调用会触碰 Godot project path resolver,在普通 test host 中可能崩溃;当前以实现和文档约束记录,后续若增加 Godot 宿主集成测试再覆盖
活跃文档
验证说明
dotnet test GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release --filter FullyQualifiedName~GodotLog -nologo- 结果:通过
- 备注:RP-003 follow-up 后 Godot logging 定向测试共
15项通过
dotnet test GFramework.Godot.Tests/GFramework.Godot.Tests.csproj -c Release -nologo- 结果:通过
- 备注:RP-003 follow-up 后 Godot 测试项目共
73项通过
dotnet format GFramework.Godot.Tests/GFramework.Godot.Tests.csproj --verify-no-changes --no-restore --include ...- 结果:通过
- 备注:include 范围为本轮修改的 C# 文件;全项目 format 仍命中既有行尾 / 编码问题,详见 trace
dotnet build GFramework.sln -c Release- 结果:通过,
0 warning / 0 error - 备注:2026-05-03 在归档维护分支补跑仓库级 Release build,验证归档改动不会影响解决方案构建
- 结果:通过,
- 历史验证明细已保留在 执行 trace 的
RP-001 验证与RP-002 验证小节,active tracking 入口只保留当前恢复点相关结果
归档说明
- 本主题已随 PR #314 合并到
origin/main - 默认 boot 索引不再指向本主题
- 后续若继续做 Godot logging 与 Core appender / sink 的统一设计,应建立新的 active topic