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 |
| Golongan | Penggunaan |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | 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. Misalnya: "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.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 templat, refaktor templat untuk menggunakan tempat penampung bernama 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 menekan aturan ini jika templat pesan log Anda didefinisikan dalam file sumber daya.