I Benchmarked 3 Ways to Log in .NET : One Allocates Nothing
Your API handles 2,000 requests per second. Each request logs 5 messages. That is 10,000 log calls per second — and if your log level is set to Warning, every single Debug and Information call is w...

Source: DEV Community
Your API handles 2,000 requests per second. Each request logs 5 messages. That is 10,000 log calls per second — and if your log level is set to Warning, every single Debug and Information call is wasted work. The string gets built. The arguments get boxed. The GC collects the result. Nobody reads it. I ran the benchmarks. The difference is not subtle. Three ways to log the same thing Here is the same log statement written three ways. All three produce identical output when the level is enabled. // Style 1: string interpolation logger.LogInformation(quot;Order {orderId} shipped to {country}"); // Style 2: message template (structured) logger.LogInformation("Order {OrderId} shipped to {Country}", orderId, country); // Style 3: [LoggerMessage] source generation LogOrderShipped(orderId, country); [LoggerMessage(Level = LogLevel.Information, Message = "Order {OrderId} shipped to {Country}")] private partial void LogOrderShipped(Guid orderId, string country); Style 1 is what most developers wri