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 |
| Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
| .NET 10'da varsayılan olarak etkin | Hayır |
Neden
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 gerektirirobject. 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.