用途:把散落的 ILogger 日志调用(LogInformation、LogWarning、LogError、LogDebug、LogTrace、LogCritical)转换为 LoggerMessage 源生成器写法,以获得高性能、AOT 兼容、无装箱开销、模板在编译期解析的日志。适用于优化热点路径日志性能、为 Native AOT 部署做准备、把分散日志按功能归类、统一 EventId 等场景。
主要能力:先搜索 ILogger 字段/参数声明及所有日志调用,记录消息模板与参数;再按功能域归类为扩展类,如 LoggingValidationExtensions、LoggingAuthenticationExtensions、LoggingDatabaseExtensions、LoggingHttpExtensions、LoggingCacheExtensions、LoggingMessagingExtensions;创建 partial static 类,用 [LoggerMessage] 标注并定义 EventId、Level、Message,方法为 partial,并以 this ILogger logger 形式提供扩展方法,从而支持 _logger.MethodName(...) 的链式写法。EventId 按类别分段:1000-1999 校验、2000-2999 认证、3000-3999 数据库、4000-4999 HTTP、5000-5999 缓存、6000-6999 消息队列、7000-7999 通用/应用。随后把内联日志调用替换为扩展方法调用,例如 _logger.LogWarning("Validation failed for {entityType}: {errors}", type, errs) 改为 _logger.ValidationFailed(type, errs)。
使用方式:改造后执行 dotnet build 验证;若构建失败,检查扩展类命名空间的 using 缺失、参数类型不匹配、重复 EventId 等问题。最后报告创建的扩展类、各分类转换的日志条数及构建状态。
限制与注意:需要 .NET 6+(源生成器内置于 SDK);partial 类是源生成器生成实现的必要条件;占位符建议用 PascalCase(如 {EntityType}),匹配不区分大小写但 PascalCase 是推荐约定。资料未提供其他平台、收费或额外安装命令信息。