newrelic / newrelic-dotnet-agent

The New Relic .NET language agent.
Apache License 2.0
94 stars 55 forks source link

MicrosoftExtensionsLogging: Add each log argument/attribute to the context data #2519

Open tylerohlsen opened 1 month ago

tylerohlsen commented 1 month ago

Feature Description

Currently, with MEL, only log scopes are included in the context data (using logger.BeginScope(...)). The log attributes that are passed as arguments to the standard logger.Log* methods are not in the context data. They are included in the formatted message, but then they lose a lot of value because they need to be parsed back out during ingestion.

For example, explicit calls to the logger (or logger extension methods) like this do not have MyData as a context data value:

logger.LogInformation("My log message with some data: {MyData}", myData);

or via the Source Generator (generated) calls like this do not have the RouteData, MethodInfo, etc as context data values:

[LoggerMessage(102, LogLevel.Information, "Route matched with {RouteData}. Executing controller action with signature {MethodInfo} on controller {Controller} ({AssemblyName}).", EventName = "ControllerActionExecuting", SkipEnabledCheck = true)]
private static partial void ControllerActionExecuting(ILogger logger, string routeData, MethodInfo methodInfo, string controller, string? assemblyName);

Describe Alternatives

None considered

Additional context

I believe this already works as described with other loggers (e.g. Serilog and NLog), but I could be wrong.

Priority

Really Want

workato-integration[bot] commented 1 month ago

https://new-relic.atlassian.net/browse/NR-276392

nrcventura commented 1 month ago

@tylerohlsen thank you for submitting this feature request. I passed the information along to other members of the team so that it can be further reviewed.

dolivanu commented 1 month ago

Very useful to get the message attributes parsed by New Relic.