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 | CA1848 |
| Judul | Menggunakan delegasi LoggerMessage |
| Kategori | Performa |
| Perbaikan bersifat merusak atau tidak merusak | Tidak terputus |
| Diaktifkan secara default di .NET 10 | Tidak |
| Bahasa yang berlaku | C# dan Visual Basic |
Penyebab
Penggunaan metode ekstensi logger, seperti LogInformation dan LogDebug.
Deskripsi aturan
Untuk skenario pengelogan berkinerja tinggi, gunakan pola LoggerMessage alih-alih Logger<T> metode ekstensi.
Cara memperbaiki pelanggaran
Gunakan LoggerMessageAttribute untuk memperbaiki pelanggaran aturan ini. (Atau, jika Anda menggunakan .NET 5 atau yang lebih lama, gunakan LoggerMessage kelas .)
public class SomethingDoer
{
private readonly ILogger _logger;
public SomethingDoer(ILogger<SomethingDoer> logger)
{
_logger = logger;
}
public void DoSomething()
{
// This call violates CA1848.
_logger.LogInformation("Did something!");
}
}
Kode berikut memperbaiki pelanggaran.
public partial class SomethingDoer
{
private readonly ILogger _logger;
public SomethingDoer(ILogger<SomethingDoer> logger)
{
_logger = logger;
}
public void DoSomething()
{
Log_DidSomething();
}
[LoggerMessage(Level = LogLevel.Information, Message = "Did something!")]
private partial void Log_DidSomething();
}
LoggerMessage memberikan keunggulan performa berikut daripada Logger<T> metode ekstensi:
- Metode ekstensi pencatat log memerlukan penerapan “boxing” (konversi) untuk jenis nilai, seperti
int, menjadiobject. Pola menghindari LoggerMessage pengkotakan dengan menggunakan field statis Action dan metode ekstensi dengan parameter bertipe kuat. - Metode ekstensi pencatat harus mengurai templat pesan (string format bernama) setiap kali pesan log ditulis. LoggerMessage hanya memerlukan penguraian templat sekali ketika pesan ditentukan.
Kapan harus menekan peringatan
Jangan menyembunyikan peringatan dari aturan ini.