diff --git a/src/Agent/NewRelic/Agent/Core/Wrapper/WrapperMap.cs b/src/Agent/NewRelic/Agent/Core/Wrapper/WrapperMap.cs index 6e3a889d3a..8e819ccc80 100644 --- a/src/Agent/NewRelic/Agent/Core/Wrapper/WrapperMap.cs +++ b/src/Agent/NewRelic/Agent/Core/Wrapper/WrapperMap.cs @@ -66,26 +66,32 @@ public WrapperMap(IEnumerable wrappers, IDefaultWrapper defaultWrapper public TrackedWrapper Get(InstrumentedMethodInfo instrumentedMethodInfo) { + var suppressDefaultWrapperDebugMessage = false; + //Then, see if there's a standard wrapper supporting this method foreach (var wrapper in _nonDefaultWrappers) { - if (CanWrap(instrumentedMethodInfo, wrapper)) + var (canWrap, suppressMessage) = CanWrap(instrumentedMethodInfo, wrapper); + if (canWrap) { return new TrackedWrapper(wrapper); } + suppressDefaultWrapperDebugMessage |= suppressMessage; } //Next, check to see if one of the dynamic wrappers can be used foreach (var wrapper in ExtensionsLoader.TryGetDynamicWrapperInstance(instrumentedMethodInfo.RequestedWrapperName)) { - if (CanWrap(instrumentedMethodInfo, wrapper)) + var (canWrap, suppressMessage) = CanWrap(instrumentedMethodInfo, wrapper); + if (canWrap) { return new TrackedWrapper(wrapper); } + suppressDefaultWrapperDebugMessage |= suppressMessage; } //Otherwise, return one of our defaults or a NoOp - return GetDefaultWrapperOrSetNoOp(instrumentedMethodInfo); + return GetDefaultWrapperOrSetNoOp(instrumentedMethodInfo, suppressDefaultWrapperDebugMessage); } public TrackedWrapper GetNoOpWrapper() @@ -93,28 +99,31 @@ public TrackedWrapper GetNoOpWrapper() return _noOpTrackedWrapper; } - private TrackedWrapper GetDefaultWrapperOrSetNoOp(InstrumentedMethodInfo instrumentedMethodInfo) + private TrackedWrapper GetDefaultWrapperOrSetNoOp(InstrumentedMethodInfo instrumentedMethodInfo, bool suppressDefaultWrapperDebugMessage) { foreach (var wrapper in _defaultWrappers) { - if (CanWrap(instrumentedMethodInfo, wrapper)) + (var canWrap, _) = CanWrap(instrumentedMethodInfo, wrapper); + + if (canWrap) { return new TrackedWrapper(wrapper); } } - Log.Debug( - "No matching wrapper found for {0}.{1}({2}) in assembly [{3}] (requested wrapper name was {4}). This usually indicates misconfigured instrumentation. This method will be ignored.", - instrumentedMethodInfo.Method.Type.FullName, - instrumentedMethodInfo.Method.MethodName, - instrumentedMethodInfo.Method.ParameterTypeNames, - instrumentedMethodInfo.Method.Type.Assembly.FullName, - instrumentedMethodInfo.RequestedWrapperName); + if (!suppressDefaultWrapperDebugMessage) + Log.Debug( + "No matching wrapper found for {0}.{1}({2}) in assembly [{3}] (requested wrapper name was {4}). This usually indicates misconfigured instrumentation. This method will be ignored.", + instrumentedMethodInfo.Method.Type.FullName, + instrumentedMethodInfo.Method.MethodName, + instrumentedMethodInfo.Method.ParameterTypeNames, + instrumentedMethodInfo.Method.Type.Assembly.FullName, + instrumentedMethodInfo.RequestedWrapperName); return GetNoOpWrapper(); } - private static bool CanWrap(InstrumentedMethodInfo instrumentedMethodInfo, IWrapper wrapper) + private static (bool canWrap, bool suppressDefaultWrapperDebugMessage) CanWrap(InstrumentedMethodInfo instrumentedMethodInfo, IWrapper wrapper) { var method = instrumentedMethodInfo.Method; var canWrapResponse = wrapper.CanWrap(instrumentedMethodInfo); @@ -127,7 +136,7 @@ private static bool CanWrap(InstrumentedMethodInfo instrumentedMethodInfo, IWrap if (canWrapResponse.CanWrap) Log.Debug($"Wrapper \"{wrapper.GetType().FullName}\" will be used for instrumented method \"{method.Type}.{method.MethodName}\""); - return canWrapResponse.CanWrap; + return (canWrapResponse.CanWrap, canWrapResponse.SuppressDefaultWrapperDebugMessage); } } } diff --git a/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Providers/Wrapper/CanWrapResponse.cs b/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Providers/Wrapper/CanWrapResponse.cs index 13c7d40698..21703c01bd 100644 --- a/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Providers/Wrapper/CanWrapResponse.cs +++ b/src/Agent/NewRelic/Agent/Extensions/NewRelic.Agent.Extensions/Providers/Wrapper/CanWrapResponse.cs @@ -5,14 +5,17 @@ namespace NewRelic.Agent.Extensions.Providers.Wrapper { public class CanWrapResponse { - public bool CanWrap; + public bool CanWrap { get; } - public string AdditionalInformation; + public string AdditionalInformation { get; } - public CanWrapResponse(bool canWrap, string additionalInformation = null) + public bool SuppressDefaultWrapperDebugMessage { get; } + + public CanWrapResponse(bool canWrap, string additionalInformation = null, bool suppressDefaultWrapperDebugMessage = false) { CanWrap = canWrap; AdditionalInformation = additionalInformation; + SuppressDefaultWrapperDebugMessage = suppressDefaultWrapperDebugMessage; } } } diff --git a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/AddProviderRegistrationWrapper.cs b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/AddProviderRegistrationWrapper.cs index e879952ded..a40f4917c0 100644 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/AddProviderRegistrationWrapper.cs +++ b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/AddProviderRegistrationWrapper.cs @@ -1,12 +1,11 @@ -// Copyright 2020 New Relic, Inc. All rights reserved. +// Copyright 2020 New Relic, Inc. All rights reserved. // SPDX-License-Identifier: Apache-2.0 using NewRelic.Agent.Api; using NewRelic.Agent.Extensions.Providers.Wrapper; -using Microsoft.Extensions.Logging; using NewRelic.Agent.Extensions.Logging; -namespace MicrosoftExtensionsLogging +namespace NewRelic.Providers.Wrapper.MicrosoftExtensionsLogging { public class AddProviderRegistrationWrapper : IWrapper { 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 2b75a0772c..3e39d87828 100644 --- a/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs +++ b/src/Agent/NewRelic/Agent/Extensions/Providers/Wrapper/MicrosoftExtensionsLogging/MicrosoftLoggingWrapper.cs @@ -32,7 +32,8 @@ public CanWrapResponse CanWrap(InstrumentedMethodInfo methodInfo) { return new CanWrapResponse(WrapperName.Equals(methodInfo.RequestedWrapperName)); } - return new CanWrapResponse(false); + + return new CanWrapResponse(false, null, true); } public AfterWrappedMethodDelegate BeforeWrappedMethod(InstrumentedMethodCall instrumentedMethodCall, IAgent agent, ITransaction transaction)