Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA1848 |
| Başlık | LoggerMessage temsilcilerini kullanma |
| Kategori | Performans |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
Günlükleyici genişletme yöntemlerinin kullanımı, örneğin LogInformation ve LogDebug.
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:
- Kayıt defteri uzantısı yöntemleri,
intgibi değer türleriniobjectiçine dönüştürmeyi ("boxing") gerektirir. Kalıp, güçlü şekilde yazılan parametrelerle statik Action alanlar ve genişletme yöntemleri kullanarak kutulama yapmaktan kaçınır. - Logger uzantı yöntemleri, her mesaj günlüğe yazıldığında ileti şablonunu (adlandırılmış biçim dizesi) ayrıştırmalıdır. LoggerMessage yalnızca ileti tanımlandığında bir kez şablonun ayrıştırılmasını gerektirir.
Uyarıların ne zaman bastırılması gerekiyor?
Bu kuraldan uyarıyı bastırmayın.