Entiendo el concepto de esta advertencia (similar a esta pregunta ), pero ¿qué tiene de malo este código?
private async Task LogWarningAsync(short? userCodeId, string message, params object[] args) { _logger.LogWarning(message, args); // Do something on the database... }La advertencia:
CA2254
La plantilla del mensaje de registro no debe variar entre llamadas a 'LoggerExtensions.LogWarning(ILogger, string?, params object?[])'
Aquí hay una discusión de otras personas que experimentan problemas similares con respecto a CA2254. Con suerte, esto se abordará en futuras versiones.
Por el momento, mi mejor solución es ignorar la advertencia.
private async Task LogWarningToDatabaseAsync(short? userCodeId, string message, params object[] args) { #pragma warning disable CA2254 // Template should be a static expression _logger.LogWarning(message, args); #pragma warning restore CA2254 // Template should be a static expression // Do something on the database... }La alternativa no es muy emocionante.
private async Task LogWarningToDatabaseAsync(short? userCodeId, string message, params object[] args) { // Move to parent. //_logger.LogWarning(message, args); // Do something on the database... } private async Task SampleAsync(short? userCodeId, string aaa, string bbb) { // I'm not happy about repeating the input message every time this gets called. _logger.LogWarning("My sample message with data {aaa} and more data {bbb}", aaa, bbb); await LogWarningToDatabaseAsync(userCodeId, "My sample message with data {aaa} and more data {bbb}", aaa, bbb); }Esto es en realidad una advertencia relevante. Al producir registros dentro de su aplicación, no debe incluir variables para construir su mensaje de registro. Por ejemplo, "Usuario 128973 conectado" no es un buen registro porque no podrá agrupar todos estos registros "conectados" para generar estadísticas. En su lugar, debe colocar el ID de usuario en un objeto separado en su objeto de registro (datos adicionales)