From 346d94fca5ca2c401b2e8071a4a94c68f3c1f241 Mon Sep 17 00:00:00 2001 From: Lowell Smith Date: Thu, 7 Mar 2024 14:09:06 -0500 Subject: [PATCH] Fix issue #2261 --- .../MicrosoftLoggingWrapper.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs index 295d71301..24e30a2ba 100644 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs +++ b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs @@ -81,14 +81,13 @@ private void RecordLogMessage(MethodCall methodCall, MEL.ILogger logger, IAgent var getLoggersArrayFunc = _getLoggersArray ??= VisibilityBypasser.Instance.GeneratePropertyAccessor(logger.GetType(), "ScopeLoggers"); var loggers = getLoggersArrayFunc(logger); - // Get the first ScopeLogger in the array (logger.ScopeLoggers[0]) - // If there is more than one scope logger, they've all received the same data, so the first - // one should be fine - object firstLogger = loggers.GetValue(0); - - // Get the scope provider from that logger (logger.ScopeLoggers[0].ExternalScopeProvider) - var scopeProviderPI = _scopeProviderPropertyInfo ??= firstLogger.GetType().GetProperty("ExternalScopeProvider"); - var scopeProvider = scopeProviderPI.GetValue(firstLogger) as IExternalScopeProvider; + // Get the last ScopeLogger in the array (logger.ScopeLoggers[loggers.Length-1]) + // If there is more than one scope logger, the last logger is the one with the ExternalScopeProvider set + object lastLogger = loggers.GetValue(loggers.Length-1); + + // Get the scope provider from that logger (logger.ScopeLoggers[loggers.Length-1].ExternalScopeProvider) + var scopeProviderPI = _scopeProviderPropertyInfo ??= lastLogger.GetType().GetProperty("ExternalScopeProvider"); + var scopeProvider = scopeProviderPI.GetValue(lastLogger) as IExternalScopeProvider; // Get the context data var harvestedKvps = new Dictionary();