SuperAPI AI 工具集

dev-structured-logs

通用与其它

查看项目

更新于 10-16 01:25

技能介绍

用途:面向 .NET/C# 代码库的确定性日志改写操作技能,把旧式字符串日志迁移为结构化日志模板,并处理 Serilog JSON 配置。不适用于通用后端可观测性或 CI/CD 指导。

主要能力:

  1. 日志转换:仅改写 logger.Log* 与 _logger.Log* 调用中消息参数使用字符串拼接、String.Format(...) 或字符串插值 $"..." 的情况,转为消息模板加属性与参数列表,保留插值表达式(含三元表达式)作为参数表达式,保留异常重载顺序与原始表达式顺序。若消息参数可能有副作用(方法调用、new、自增自减、复合赋值),先提取为临时变量并标记为需人工复核。不做跨语句改写,改动限于调用点。
  2. CommandHandler 作用域:通过实现 ICommandHandler<T> 的类,或匹配默认 Handle|HandleAsync 的公共方法(首个参数视为命令对象)识别处理器。启用 --enable-handler-scope 后,在方法开头缺失时插入作用域,从命令键属性(UserId、TransactionId、TransferId、VerificationId、SessionId、Id)构建字典,使用 using var _scope = _logger.BeginScope(__scopeItems);,若已存在等价块则跳过。
  3. Serilog appsettings:若任一 .csproj 含 Serilog、Serilog. 或 Sc.Infrastructure.Serilog 包引用,则视为启用 Serilog,检查仓库内所有 appsettings.json。对带对象 Args 的 File sink(含 Async -> Logger -> configureLogger -> WriteTo 等嵌套管道):确保 Args.path 以 .json 结尾,调试日志路径(如 *.debug)改名为 .debug.json,设置 Args.formatter 为 Sc.Infrastructure.Serilog.CustomJsonFormatter, Sc.Infrastructure.Serilog,移除 Args.outputTemplate;不改非 File sink。无 Serilog 段或 File sink 则不操作。

使用方式:先 dry-run:python .codex/skills/dev-structured-logs/scripts/structured_logs.py --path <repo> --dry-run,查看 <repo>/patch.diff 与 <repo>/preview-report.json;审阅后再应用:python .codex/skills/dev-structured-logs/scripts/structured_logs.py --path <repo> --apply --backup-dir <dir>;可选提交:python .codex/skills/dev-structured-logs/scripts/structured_logs.py --path <repo> --apply --commit-msg "chore: structured logging migration"。CLI 支持 --path、--dry-run、--apply、--preview-file、--backup-dir、--enable-handler-scope、--handler-pattern、--log-framework(serilog|microsoft|auto)、可重复的 --exclude、--commit-msg。未提供 --apply 时默认 dry-run;Handler 作用域默认关闭。不触碰 bin/、obj/、node_modules/、packages/、.git/、.vs/ 等排除或生成目录。preview-report.json 含 file、line、original、transformed、risk_level、reason,并对高风险改写标注。应用时在 --backup-dir 或 .codex/skills/dev-structured-logs/backups 创建备份。

适用场景:需要批量、可审阅地把遗留 .NET/C# 日志迁移到结构化模板,并统一 Serilog JSON 文件输出配置的仓库。

限制:仅处理上述日志调用形式与 Serilog File sink 配置;不处理服务设计、运行时可观测性策略或 API 层重构(应改用 $software-csharp-backend),也不处理 nuke/Build.cs 或 CI 执行变更(应改用 $ops-nuke-cicd)。