Skip to content

Commit

Permalink
chore: Suppress "No matching wrapper" message when MEL is disabled
Browse files Browse the repository at this point in the history
  • Loading branch information
tippmar-nr committed Jun 18, 2024
1 parent bb46aca commit cf54951
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 21 deletions.
37 changes: 23 additions & 14 deletions src/Agent/NewRelic/Agent/Core/Wrapper/WrapperMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,55 +66,64 @@ public WrapperMap(IEnumerable<IWrapper> 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()
{
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);
Expand All @@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
}
Original file line number Diff line number Diff line change
@@ -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
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit cf54951

Please sign in to comment.