ReSharper 2025.2 Help

代码检查:日志消息模板在调用日志方法时不应有所不同

此检查突出显示了日志消息模板在多次调用日志方法时有所不同的情况,特别是那些带有 StructuredMessageTemplate 属性的调用,来自 JetBrains.Annotations。 这可能导致日志记录效率低下,并可能在结构化日志系统中引发错误的日志处理。

此检查类似于 Visual Studio 中的 CA2254 ,但它提供了一个快速修复功能,将基于插值的日志消息(例如, logger.Log($"使用 {arguments} 插值记录日志") )重写为结构化日志格式(例如, logger.Log("使用 {arguments} 插值记录日志", arguments) ),符合 Microsoft 指南的建议。

其目的是确保使用结构化日志的日志框架能够将提供的字符串识别为一致且格式化的消息模板。 动态值或变量应始终作为单独的参数记录,而不是插入到消息模板本身中。

using JetBrains.Annotations; class Service { void Log(ILogger logger, int eventType, string fileName) { logger.WriteLog($"Published {eventType} event for {fileName}"); } } interface ILogger { void WriteLog([StructuredMessageTemplate]string message); void WriteLog([StructuredMessageTemplate]string message, params object[] args); }
class Service { void Log(ILogger logger, int eventType, string fileName) { logger.WriteLog("Published {EventType} event for {FileName}", eventType, fileName); } } interface ILogger { void WriteLog([StructuredMessageTemplate]string message); void WriteLog([StructuredMessageTemplate]string message, params object[] args); }

遵循这些实践与 Microsoft 对结构化日志的推荐保持一致。 有关高性能结构化日志实践的更多信息,请参阅 .NET 中的高性能日志记录

最后修改日期: 2025年 9月 27日