Aracılığıyla paylaş


CA1848: LoggerMessage temsilcilerini kullanma

Özellik Değer
Kural Kimliği CA1848
Başlık LoggerMessage temsilcilerini kullanma
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 10'da varsayılan olarak etkin Hayır

Neden

kullanımı.

Kural açıklaması

Yüksek performanslı günlük senaryoları için uzantı yöntemleri yerine Logger<T> desenini kullanın.

İhlalleri düzeltme

Bu kuralın ihlallerini düzeltmek için kullanın LoggerMessageAttribute . (.NET 5 veya önceki bir sürümünü kullanıyorsanız, LoggerMessage sınıfını kullanabilirsiniz.)

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!");
   }
}

Aşağıdaki kod, ihlali düzeltir.

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 uzantı yöntemlerine göre Logger<T> aşağıdaki performans avantajlarını sağlar:

  • Günlükçü uzantısı yöntemleri, gibi int"boxing" (dönüştürme) değer türlerini içine gerektirir object. Desen, LoggerMessage kesin olarak yazılan parametrelerle statik Action alanlar ve uzantı yöntemleri kullanarak kutulama yapmaktan kaçınır.
  • Günlükçü uzantısı yöntemleri, günlük iletisi her yazıldıktan sonra ileti şablonunu (adlandırılmış biçim dizesi) ayrıştırmalıdır. LoggerMessage bir şablonun yalnızca ileti tanımlandığında ayrıştırılması gerekir.

Uyarıların ne zaman bastırılması gerekiyor?

Bu kuraldan uyarıyı bastırmayın.

Ayrıca bkz.