Logging ohne Boxing
- Matt
Ein _logger.LogInformation("Kunde {Id} geladen", id) boxt den Parameter und formatiert die Zeichenkette, selbst wenn die Stufe gar nicht aktiv ist.
Der Quellgenerator nimmt einem das ab:
internal static partial class Log
{
[LoggerMessage(Level = LogLevel.Information,
Message = "Kunde {KundenId} geladen in {Dauer}ms")]
public static partial void KundeGeladen(
this ILogger logger, int kundenId, long dauer);
}
logger.KundeGeladen(id, sw.ElapsedMilliseconds);
Bei einem Dienst mit vielen Debug-Meldungen war das der Unterschied zwischen spürbarem Overhead und keinem messbaren. Der Nebeneffekt ist mir fast lieber: Die Meldungstexte stehen alle an einer Stelle.