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.
| Eigenschappen | Weergegeven als |
|---|---|
| Regel-id | CA1848 |
| Titel | De LoggerMessage-gemachtigden gebruiken |
| Categorie | Prestaties |
| Oplossing is brekend of niet-brekend | Niet-brekend |
| Standaard ingeschakeld in .NET 9 | Nee |
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.
Schendingen oplossen
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:
- Voor extensiemethoden voor logboekregistratie zijn waardetypen voor boksen (converteren) vereist, zoals
int, inobject. Het LoggerMessage patroon voorkomt boksen met behulp van statische Action velden en extensiemethoden met sterk getypte 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.