Nota
L'accés a aquesta pàgina requereix autorització. Podeu provar d'iniciar la sessió o de canviar els directoris.
L'accés a aquesta pàgina requereix autorització. Podeu provar de canviar els directoris.
| Propiedad | Valor |
|---|---|
| Identificador de la regla | CA1848 |
| Título | usar los delegados LoggerMessage |
| Categoría | Rendimiento |
| La corrección interrumpe o no interrumpe | Sin interrupción |
| Habilitado de forma predeterminada en .NET 10 | No |
| Idiomas aplicables | C# y Visual Basic |
Causa
Uso de los métodos de extensión de registrador, como LogInformation y LogDebug.
Descripción de la regla
Para escenarios de registro de alto rendimiento, use el patrón LoggerMessage en lugar de Logger<T> métodos de extensión.
Cómo corregir infracciones
Use LoggerMessageAttribute para corregir infracciones de esta regla. (O bien, si usa .NET 5 o versiones anteriores, use la LoggerMessage clase ).
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!");
}
}
El código siguiente corrige la infracción.
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 proporciona las siguientes ventajas de rendimiento sobre Logger<T> los métodos de extensión:
- Los métodos de extensión del registrador requieren la conversión boxing de tipos de valor, como
int, enobject. El patrón LoggerMessage evita la conversión boxing mediante el uso de campos Action estáticos y métodos de extensión con parámetros fuertemente tipados. - Los métodos de extensión del registrador deben analizar la plantilla de mensaje (cadena de formato con nombre) cada vez que se escribe un mensaje de registro. LoggerMessage solo necesita analizar una vez una plantilla cuando se define el mensaje.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.