Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| Properti | Nilai |
|---|---|
| ID Aturan | CA2254 |
| Judul | Templat harus berupa ekspresi statis |
| Kategori | Penggunaan |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Sebagai saran |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Templat pesan yang diteruskan ke API pencatat tidak konstan. Ini terjadi ketika templat yang diteruskan menggunakan penggabungan string atau interpolasi. Sebaliknya, templat harus menjadi nilai konstanta yang mewakili pesan log dalam format templat pesan. Misalnya: "User {User} logged in from {Address}". Untuk informasi selengkapnya, lihat Pemformatan templat pesan log.
Deskripsi aturan
Saat melakukan pencatatan log, lebih baik untuk mempertahankan struktur log (termasuk nama placeholder) bersama dengan nilai placeholder. 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.LogWarning("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.LogWarning("Person " + firstName + " " + lastName + " encountered an issue");
// String interpolation also loses the association between placeholder names and their values.
logger.LogWarning($"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 template, perbarui template untuk menggunakan placeholder yang diberi nama sebagai gantinya.
logger.LogWarning("Person {FirstName} {LastName} encountered an issue", firstName, lastName);
Untuk contoh penggunaan, lihat LoggerExtensions.LogInformation metode .
Kapan harus menyembunyikan kesalahan
Aman untuk menekan peringatan dari aturan ini jika kasus penggunaan Anda tidak memerlukan pengelogan terstruktur. Anda juga dapat mengabaikan aturan ini jika templat pesan log Anda didefinisikan dalam file sumber daya.