Logging ohne Boxing

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.