Skip to content

Commit f8422d6

Browse files
fix: Fix a context data capture when the Microsoft.Extensions.Logging console logger is used. (#2261) (#2315)
1 parent 81abc5c commit f8422d6

File tree

1 file changed

+7
-8
lines changed

1 file changed

+7
-8
lines changed

src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs

+7-8
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,13 @@ private static Dictionary<string, object> GetContextData(MEL.ILogger logger, IAg
8181
var getLoggersArrayFunc = _getLoggersArray ??= VisibilityBypasser.Instance.GeneratePropertyAccessor<dynamic>(logger.GetType(), "ScopeLoggers");
8282
var loggers = getLoggersArrayFunc(logger);
8383

84-
// Get the first ScopeLogger in the array (logger.ScopeLoggers[0])
85-
// If there is more than one scope logger, they've all received the same data, so the first
86-
// one should be fine
87-
object firstLogger = loggers.GetValue(0);
88-
89-
// Get the scope provider from that logger (logger.ScopeLoggers[0].ExternalScopeProvider)
90-
var scopeProviderPI = _scopeProviderPropertyInfo ??= firstLogger.GetType().GetProperty("ExternalScopeProvider");
91-
var scopeProvider = scopeProviderPI.GetValue(firstLogger) as IExternalScopeProvider;
84+
// Get the last ScopeLogger in the array (logger.ScopeLoggers[loggers.Length-1])
85+
// If there is more than one scope logger, the last logger is the one with the ExternalScopeProvider set
86+
object lastLogger = loggers.GetValue(loggers.Length-1);
87+
88+
// Get the scope provider from that logger (logger.ScopeLoggers[loggers.Length-1].ExternalScopeProvider)
89+
var scopeProviderPI = _scopeProviderPropertyInfo ??= lastLogger.GetType().GetProperty("ExternalScopeProvider");
90+
var scopeProvider = scopeProviderPI.GetValue(lastLogger) as IExternalScopeProvider;
9291

9392
// Get the context data
9493
var harvestedKvps = new Dictionary<string, object>();

0 commit comments

Comments
 (0)