CA2254: Şablon statik bir ifade olmalıdır

Özellik Değer
Kural Kimliği CA2254
Başlık Şablon statik bir ifade olmalıdır
Kategori Kullanım
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

Günlükçü API'sine geçirilen ileti şablonu sabit değildir. Geçirilen şablon dize birleştirme veya ilişkilendirme kullandığında bu durum oluşur. Bunun yerine, şablon, ileti şablonu biçimindeki günlük iletisini temsil eden sabit bir değer olmalıdır. Örneğin: "User {User} logged in from {Address}". Daha fazla bilgi için bkz . Günlük iletisi şablonu biçimlendirmesi.

Kural açıklaması

Günlük kaydı yapılırken, yer tutucu değerleriyle birlikte günlüğün yapısının (yer tutucu adları dahil) korunması tercih edilir. Bu bilgilerin korunması, günlük toplama ve izleme yazılımında daha iyi gözlemlenebilirlik ve arama yapılmasını sağlar.

Tercihli:

var firstName = "Lorenz";
var lastName = "Otto";

// This tells the logger that there are FirstName and LastName properties
// on the log message, and correlates them with the argument values.
logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);

Tercih edilmeyen:

// DO NOT DO THIS

var firstName = "Lorenz";
var lastName = "Otto";

// Here, the log template itself is changing, and the association between named placeholders and their values is lost.
logger.Warning("Person " + firstName + " " + lastName + " encountered an issue");

// String interpolation also loses the association between placeholder names and their values.
logger.Warning($"Person {firstName} {lastName} encountered an issue");

Günlük iletisi şablonu aramalar arasında değişiklik göstermelidir.

İhlalleri düzeltme

İleti şablonunu sabit bir ifade olacak şekilde güncelleştirin. Değerleri doğrudan şablonda kullanıyorsanız, bunun yerine adlandırılmış yer tutucuları kullanmak için şablonu yeniden düzenleme.

logger.Warning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);

Kullanım örnekleri için yöntemine LoggerExtensions.LogInformation bakın.

Hatalar ne zaman gizlenecek?

Kullanım örneğinizin yapılandırılmış günlük kaydı gerektirmemesi durumunda bu kuraldan gelen bir uyarıyı gizlemeniz güvenlidir. Günlük iletisi şablonunuz bir kaynak dosyasında tanımlanmışsa bu kuralın gizlenmek de güvenlidir.

Ayrıca bkz.