Bagikan melalui


CA1848: Gunakan delegasi LoggerMessage

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, menjadi object. 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.

Lihat juga