JetBrains Rider 2026.1 Help

コードインスペクション:ログ記録メッセージテンプレートはログ記録メソッドの呼び出しごとに変化してはいけません

このインスペクションは、ロギングメソッド(特に JetBrains.AnnotationsStructuredMessageTemplate 属性でアノテーションされたメソッド)の複数の呼び出し間で、ロギングメッセージのテンプレートが異なるケースを指摘しています。 これは、構造化ロギングシステムにおいて、ロギングの効率が悪くなり、ログ処理に誤りが生じる可能性があります。

インスペクションは Visual Studio の CA2254 に似ていますが、Microsoft ガイドラインで提案されているように、補間ベースのログメッセージ (例: logger.Log($"logging with {arguments} interpolation")) を構造的にログに記録された形式 (例: logger.Log("logging with {arguments} interpolation", arguments)) に書き換えるクイックフィックスを提供します。

目的は、構造化ログを使用するログフレームワークが、提供された文字列を一貫性がありフォーマットされたメッセージテンプレートとして認識できるようにすることです。 動的な値や変数は、メッセージテンプレート自体に挿入されるのではなく、常に個別の引数としてログに記録する必要があります。

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 での高パフォーマンスなログ記録を参照してください。

2026 年 6 月 12 日