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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk