Bagikan melalui


CA2254: Template harus berupa ekspresi statik

Properti Nilai
ID Aturan CA2254
Judul Templat harus berupa ekspresi statis
Golongan Penggunaan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Templat pesan yang diteruskan ke API pencatat tidak konstan. Ini terjadi ketika templat yang diteruskan menggunakan penggalian string atau interpolasi. Sebaliknya, templat harus menjadi nilai konstanta yang mewakili pesan log dalam format templat pesan. Sebagai contoh: "User {User} logged in from {Address}". Untuk informasi selengkapnya, lihat Pemformatan templat pesan log.

Deskripsi aturan

Saat melakukan pengelogan, diinginkan untuk mempertahankan struktur log (termasuk nama tempat penampung) bersama dengan nilai tempat penampung. Mempertahankan informasi ini memungkinkan pengamatan dan pencarian yang lebih baik dalam agregasi log dan perangkat lunak pemantauan.

Pilihan:

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);

Tidak disukai:

// 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");

Template pesan pengelogan tidak boleh berbeda di antara panggilan.

Cara memperbaiki pelanggaran

Perbarui templat pesan menjadi ekspresi konstanta. Jika Anda menggunakan nilai langsung dalam templat, refaktor templat untuk menggunakan tempat penampung bernama sebagai gantinya.

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

Kapan harus menyembunyikan kesalahan

Aman untuk menekan peringatan dari aturan ini jika kasus penggunaan Anda tidak memerlukan pengelogan terstruktur. Anda juga dapat menekan aturan ini jika templat pesan log Anda didefinisikan dalam file sumber daya.

Baca juga