Remove closure/delegate allocation from ConsoleLoggerProvider.CreateLogger (#45236)
authorStephen Toub <stoub@microsoft.com>
Thu, 26 Nov 2020 11:07:40 +0000 (06:07 -0500)
committerGitHub <noreply@github.com>
Thu, 26 Nov 2020 11:07:40 +0000 (06:07 -0500)
* Remove closure/delegate allocation from ConsoleLoggerProvider.CreateLogger

* Update src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerProvider.cs

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
src/libraries/Microsoft.Extensions.Logging.Console/src/ConsoleLoggerProvider.cs

index fd995f7..3c6d60e 100644 (file)
@@ -135,20 +135,24 @@ namespace Microsoft.Extensions.Logging.Console
                     ConsoleLoggerFormat.Systemd => _formatters[ConsoleFormatterNames.Systemd],
                     _ => _formatters[ConsoleFormatterNames.Simple],
                 };
+#pragma warning restore CS0618
+
                 if (_options.CurrentValue.FormatterName == null)
                 {
                     UpdateFormatterOptions(logFormatter, _options.CurrentValue);
                 }
-#pragma warning restore CS0618
             }
 
-            return _loggers.GetOrAdd(name, loggerName => new ConsoleLogger(name, _messageQueue)
-            {
-                Options = _options.CurrentValue,
-                ScopeProvider = _scopeProvider,
-                Formatter = logFormatter,
-            });
+            return _loggers.TryGetValue(name, out ConsoleLogger logger) ?
+                logger :
+                _loggers.GetOrAdd(name, new ConsoleLogger(name, _messageQueue)
+                {
+                    Options = _options.CurrentValue,
+                    ScopeProvider = _scopeProvider,
+                    Formatter = logFormatter,
+                });
         }
+
 #pragma warning disable CS0618
         private void UpdateFormatterOptions(ConsoleFormatter formatter, ConsoleLoggerOptions deprecatedFromOptions)
         {