Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA1848 |
| Titel | De LoggerMessage-gemachtigden gebruiken |
| Categorie | Prestaties |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
Gebruik van extensiemethoden voor logboekregistratie, zoals LogInformation en LogDebug.
Beschrijving van regel
Gebruik voor logboekregistratiescenario's met hoge prestaties het LoggerMessage-patroon in plaats van Logger<T> extensiemethoden.
Hoe schendingen op te lossen
Gebruik LoggerMessageAttribute dit om schendingen van deze regel op te lossen. (Of als u .NET 5 of eerder gebruikt, gebruikt u de LoggerMessage klasse.)
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!");
}
}
Met de volgende code wordt de schending opgelost.
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 biedt de volgende prestatievoordelen ten opzichte Logger<T> van extensiemethoden:
- Extensiemethoden voor logboekregistratie vereisen het "boxen" (converteren) van waardetypen, zoals
int, naarobject. Het LoggerMessage patroon voorkomt verpakken door gebruik te maken van statische Action velden en uitbreidingsmethoden met sterk getype parameters. - Extensiemethoden voor logboekregistratie moeten de berichtsjabloon (benoemde notatietekenreeks) parseren telkens wanneer een logboekbericht wordt geschreven. LoggerMessage parseren van een sjabloon is slechts eenmaal vereist wanneer het bericht is gedefinieerd.
Wanneer waarschuwingen onderdrukken
Een waarschuwing van deze regel niet onderdrukken.