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 |
| Golongan | Performa |
| Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
| Diaktifkan secara default di .NET 10 | No |
Penyebab
Penggunaan metode ekstensi pencatat, 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 memerlukan jenis nilai "tinju" (mengonversi), seperti
int, menjadiobject. Pola menghindari LoggerMessage tinju dengan menggunakan bidang statis Action dan metode ekstensi dengan parameter yang sangat ditik. - 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.