Skip to content

Commit afc1701

Browse files
authored
Fix Microsoft.Extensions.Telemetry logging integration in 9.3.0 (#6773)
## Summary of changes Fixes the Microsoft.Extensions.Telemetry integration for 9.3.0 ## Reason for change 9.3.0 [introduced a new optional parameter](dotnet/extensions#5574) to a public method we instrument, breaking our integration ## Implementation details Add instrumentation for the new signature ## Test coverage This is the test - if everything passes, we're good ## Other details Identified in #6732
1 parent 27b6beb commit afc1701

File tree

17 files changed

+243
-126
lines changed

17 files changed

+243
-126
lines changed

tracer/build/PackageVersionsLatestMajors.g.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4237,7 +4237,7 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
42374237
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
42384238
</PackageVersionSample>
42394239
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
4240-
<Properties>ApiVersion=9.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
4240+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
42414241
<TargetFramework>net462</TargetFramework>
42424242
<RequiresDockerDependency>None</RequiresDockerDependency>
42434243
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
@@ -4261,7 +4261,7 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
42614261
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
42624262
</PackageVersionSample>
42634263
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
4264-
<Properties>ApiVersion=9.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
4264+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
42654265
<TargetFramework>net8.0</TargetFramework>
42664266
<RequiresDockerDependency>None</RequiresDockerDependency>
42674267
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
@@ -4273,7 +4273,7 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
42734273
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
42744274
</PackageVersionSample>
42754275
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
4276-
<Properties>ApiVersion=9.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
4276+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
42774277
<TargetFramework>net9.0</TargetFramework>
42784278
<RequiresDockerDependency>None</RequiresDockerDependency>
42794279
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>

tracer/build/PackageVersionsLatestMinors.g.props

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24090,6 +24090,12 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
2409024090
<RequiresDockerDependency>None</RequiresDockerDependency>
2409124091
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
2409224092
</PackageVersionSample>
24093+
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
24094+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
24095+
<TargetFramework>net462</TargetFramework>
24096+
<RequiresDockerDependency>None</RequiresDockerDependency>
24097+
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
24098+
</PackageVersionSample>
2409324099
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
2409424100
<Properties>ApiVersion=8.0.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
2409524101
<TargetFramework>net6.0</TargetFramework>
@@ -24306,6 +24312,12 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
2430624312
<RequiresDockerDependency>None</RequiresDockerDependency>
2430724313
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
2430824314
</PackageVersionSample>
24315+
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
24316+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
24317+
<TargetFramework>net8.0</TargetFramework>
24318+
<RequiresDockerDependency>None</RequiresDockerDependency>
24319+
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
24320+
</PackageVersionSample>
2430924321
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
2431024322
<Properties>ApiVersion=8.0.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
2431124323
<TargetFramework>net9.0</TargetFramework>
@@ -24390,6 +24402,12 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
2439024402
<RequiresDockerDependency>None</RequiresDockerDependency>
2439124403
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
2439224404
</PackageVersionSample>
24405+
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
24406+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
24407+
<TargetFramework>net9.0</TargetFramework>
24408+
<RequiresDockerDependency>None</RequiresDockerDependency>
24409+
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
24410+
</PackageVersionSample>
2439324411
<PackageVersionSample Include="test\test-applications\integrations\Samples.Aerospike\Samples.Aerospike.csproj">
2439424412
<Properties>ApiVersion=4.0.3;RestoreRecursive=false;BuildProjectReferences=false</Properties>
2439524413
<TargetFramework>net462</TargetFramework>

tracer/build/PackageVersionsLatestSpecific.g.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5917,7 +5917,7 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
59175917
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
59185918
</PackageVersionSample>
59195919
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
5920-
<Properties>ApiVersion=9.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
5920+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
59215921
<TargetFramework>net462</TargetFramework>
59225922
<RequiresDockerDependency>None</RequiresDockerDependency>
59235923
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
@@ -5941,7 +5941,7 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
59415941
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
59425942
</PackageVersionSample>
59435943
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
5944-
<Properties>ApiVersion=9.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
5944+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
59455945
<TargetFramework>net8.0</TargetFramework>
59465946
<RequiresDockerDependency>None</RequiresDockerDependency>
59475947
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
@@ -5953,7 +5953,7 @@ NOTE: This code was generated by the GeneratePackageVersions tool. To safely
59535953
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>
59545954
</PackageVersionSample>
59555955
<PackageVersionSample Include="test\test-applications\integrations\LogsInjection.ILogger.ExtendedLogger\LogsInjection.ILogger.ExtendedLogger.csproj">
5956-
<Properties>ApiVersion=9.2.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
5956+
<Properties>ApiVersion=9.3.0;RestoreRecursive=false;BuildProjectReferences=false</Properties>
59575957
<TargetFramework>net9.0</TargetFramework>
59585958
<RequiresDockerDependency>None</RequiresDockerDependency>
59595959
<SampleName>LogsInjection.ILogger.ExtendedLogger</SampleName>

tracer/build/supported_calltargets.g.json

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8430,15 +8430,16 @@
84308430
"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.ILogEnricher]",
84318431
"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.IStaticLogEnricher]",
84328432
"Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerFilterOptions]",
8433+
"Microsoft.Extensions.Logging.LoggingSampler",
84338434
"Microsoft.Extensions.Options.IOptions`1[Microsoft.Extensions.Logging.LoggerFactoryOptions]",
84348435
"Microsoft.Extensions.Logging.IExternalScopeProvider",
84358436
"Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerEnrichmentOptions]",
84368437
"Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerRedactionOptions]",
84378438
"Microsoft.Extensions.Compliance.Redaction.IRedactorProvider"
84388439
],
84398440
"MinimumVersion": {
8440-
"Item1": 8,
8441-
"Item2": 0,
8441+
"Item1": 9,
8442+
"Item2": 3,
84428443
"Item3": 0
84438444
},
84448445
"MaximumVersion": {
@@ -8451,6 +8452,38 @@
84518452
"IsAdoNetIntegration": false,
84528453
"InstrumentationCategory": 1
84538454
},
8455+
{
8456+
"IntegrationName": "ILogger",
8457+
"AssemblyName": "Microsoft.Extensions.Telemetry",
8458+
"TargetTypeName": "Microsoft.Extensions.Logging.ExtendedLoggerFactory",
8459+
"TargetMethodName": ".ctor",
8460+
"TargetReturnType": "System.Void",
8461+
"TargetParameterTypes": [
8462+
"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Logging.ILoggerProvider]",
8463+
"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.ILogEnricher]",
8464+
"System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.IStaticLogEnricher]",
8465+
"Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerFilterOptions]",
8466+
"Microsoft.Extensions.Options.IOptions`1[Microsoft.Extensions.Logging.LoggerFactoryOptions]",
8467+
"Microsoft.Extensions.Logging.IExternalScopeProvider",
8468+
"Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerEnrichmentOptions]",
8469+
"Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerRedactionOptions]",
8470+
"Microsoft.Extensions.Compliance.Redaction.IRedactorProvider"
8471+
],
8472+
"MinimumVersion": {
8473+
"Item1": 8,
8474+
"Item2": 0,
8475+
"Item3": 0
8476+
},
8477+
"MaximumVersion": {
8478+
"Item1": 9,
8479+
"Item2": 3,
8480+
"Item3": 0
8481+
},
8482+
"InstrumentationTypeName": "Datadog.Trace.ClrProfiler.AutoInstrumentation.Logging.ILogger.DirectSubmission.ExtendedLoggerFactoryConstructorIntegration_8xx",
8483+
"IntegrationKind": 0,
8484+
"IsAdoNetIntegration": false,
8485+
"InstrumentationCategory": 1
8486+
},
84548487
{
84558488
"IntegrationName": "ILogger",
84568489
"AssemblyName": "Microsoft.Extensions.Telemetry",

tracer/build/supported_versions.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -795,9 +795,9 @@
795795
"minVersionAvailableInclusive": "8.0.0",
796796
"minVersionSupportedInclusive": "8.0.0",
797797
"minVersionTestedInclusive": "8.10.0",
798-
"maxVersionSupportedInclusive": "9.2.0",
799-
"maxVersionAvailableInclusive": "9.2.0",
800-
"maxVersionTestedInclusive": "9.2.0"
798+
"maxVersionSupportedInclusive": "9.3.0",
799+
"maxVersionAvailableInclusive": "9.3.0",
800+
"maxVersionTestedInclusive": "9.3.0"
801801
}
802802
]
803803
},

tracer/dependabot/Datadog.Dependabot.Integrations.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,8 @@
210210

211211
<!-- Integration: Microsoft.Extensions.Telemetry -->
212212
<!-- Assembly: Microsoft.Extensions.Telemetry -->
213-
<!-- Latest package https://www.nuget.org/packages/Microsoft.Extensions.Telemetry/9.2.0 -->
214-
<PackageReference Include="Microsoft.Extensions.Telemetry" Version="9.2.0" />
213+
<!-- Latest package https://www.nuget.org/packages/Microsoft.Extensions.Telemetry/9.3.0 -->
214+
<PackageReference Include="Microsoft.Extensions.Telemetry" Version="9.3.0" />
215215

216216
<!-- Integration: Microsoft.VisualStudio.TestPlatform.TestFramework -->
217217
<!-- Assembly: Microsoft.VisualStudio.TestPlatform.TestFramework -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// <copyright file="ExtendedLoggerFactoryCommon.cs" company="Datadog">
2+
// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License.
3+
// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc.
4+
// </copyright>
5+
6+
#nullable enable
7+
8+
using System;
9+
using Datadog.Trace.ClrProfiler.CallTarget;
10+
using Datadog.Trace.Configuration;
11+
using Datadog.Trace.DuckTyping;
12+
13+
namespace Datadog.Trace.ClrProfiler.AutoInstrumentation.Logging.ILogger.DirectSubmission;
14+
15+
internal static class ExtendedLoggerFactoryCommon
16+
{
17+
internal static CallTargetReturn OnMethodEnd<TTarget>(TTarget instance, Exception? exception, in CallTargetState state)
18+
{
19+
if (!TracerManager.Instance.DirectLogSubmission.Settings.IsIntegrationEnabled(IntegrationId.ILogger))
20+
{
21+
return CallTargetReturn.GetDefault();
22+
}
23+
24+
if (exception is not null)
25+
{
26+
// If there's an exception during the constructor, things aren't going to work anyway
27+
return CallTargetReturn.GetDefault();
28+
}
29+
30+
var scopeProvider = state.State is { } rawScopeProvider
31+
? rawScopeProvider.DuckCast<IExternalScopeProvider>()
32+
: instance.DuckCast<ExtendedLoggerFactoryProxy>().ScopeProvider;
33+
34+
if (LoggerFactoryIntegrationCommon<TTarget>.TryAddDirectSubmissionLoggerProvider(instance, scopeProvider))
35+
{
36+
TracerManager.Instance.Telemetry.IntegrationGeneratedSpan(IntegrationId.ILogger);
37+
}
38+
39+
return CallTargetReturn.GetDefault();
40+
}
41+
}

tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/Logging/ILogger/DirectSubmission/ExtendedLoggerFactoryConstructorIntegration.cs

Lines changed: 5 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -13,48 +13,26 @@
1313
namespace Datadog.Trace.ClrProfiler.AutoInstrumentation.Logging.ILogger.DirectSubmission;
1414

1515
/// <summary>
16-
/// LoggerFactory() calltarget instrumentation for direct log submission
16+
/// ExtendedLoggerFactory calltarget instrumentation for direct log submission
1717
/// </summary>
1818
[InstrumentMethod(
1919
AssemblyName = "Microsoft.Extensions.Telemetry",
2020
TypeName = "Microsoft.Extensions.Logging.ExtendedLoggerFactory",
2121
MethodName = ".ctor",
2222
ReturnTypeName = ClrNames.Void,
23-
ParameterTypeNames = new[] { "System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Logging.ILoggerProvider]", "System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.ILogEnricher]", "System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.IStaticLogEnricher]", "Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerFilterOptions]", "Microsoft.Extensions.Options.IOptions`1[Microsoft.Extensions.Logging.LoggerFactoryOptions]", "Microsoft.Extensions.Logging.IExternalScopeProvider", "Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerEnrichmentOptions]", "Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerRedactionOptions]", "Microsoft.Extensions.Compliance.Redaction.IRedactorProvider" },
24-
MinimumVersion = "8.0.0",
23+
ParameterTypeNames = ["System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Logging.ILoggerProvider]", "System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.ILogEnricher]", "System.Collections.Generic.IEnumerable`1[Microsoft.Extensions.Diagnostics.Enrichment.IStaticLogEnricher]", "Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerFilterOptions]", "Microsoft.Extensions.Logging.LoggingSampler", "Microsoft.Extensions.Options.IOptions`1[Microsoft.Extensions.Logging.LoggerFactoryOptions]", "Microsoft.Extensions.Logging.IExternalScopeProvider", "Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerEnrichmentOptions]", "Microsoft.Extensions.Options.IOptionsMonitor`1[Microsoft.Extensions.Logging.LoggerRedactionOptions]", "Microsoft.Extensions.Compliance.Redaction.IRedactorProvider"],
24+
MinimumVersion = "9.3.0",
2525
MaximumVersion = SupportedVersions.LatestDotNet,
2626
IntegrationName = LoggerIntegrationCommon.IntegrationName)]
2727
[Browsable(false)]
2828
[EditorBrowsable(EditorBrowsableState.Never)]
2929
public class ExtendedLoggerFactoryConstructorIntegration
3030
{
31-
internal static CallTargetState OnMethodBegin<TTarget, TProviders, TEnrichers, TStaticEnrichers, TFilterOptions, TFactoryOptions, TScopeProvider, TEnrichmentOptions, TRedactionOptions, TRedactorProvider>(TTarget instance, TProviders providers, TEnrichers enrichers, TStaticEnrichers staticEnrichers, TFilterOptions filterOptions, TFactoryOptions factoryOptions, TScopeProvider scopeProvider, TEnrichmentOptions enrichmentOptions, TRedactionOptions redactionOptions, TRedactorProvider redactorProvider)
31+
internal static CallTargetState OnMethodBegin<TTarget, TProviders, TEnrichers, TStaticEnrichers, TFilterOptions, TSampler, TFactoryOptions, TScopeProvider, TEnrichmentOptions, TRedactionOptions, TRedactorProvider>(TTarget instance, TProviders? providers, TEnrichers? enrichers, TStaticEnrichers? staticEnrichers, TFilterOptions? filterOptions, TSampler? sampler, TFactoryOptions? factoryOptions, TScopeProvider? scopeProvider, TEnrichmentOptions? enrichmentOptions, TRedactionOptions? redactionOptions, TRedactorProvider? redactorProvider)
3232
{
3333
return new CallTargetState(scope: null, state: scopeProvider);
3434
}
3535

3636
internal static CallTargetReturn OnMethodEnd<TTarget>(TTarget instance, Exception? exception, in CallTargetState state)
37-
{
38-
if (!TracerManager.Instance.DirectLogSubmission.Settings.IsIntegrationEnabled(IntegrationId.ILogger))
39-
{
40-
return CallTargetReturn.GetDefault();
41-
}
42-
43-
if (exception is not null)
44-
{
45-
// If there's an exception during the constructor, things aren't going to work anyway
46-
return CallTargetReturn.GetDefault();
47-
}
48-
49-
var scopeProvider = state.State is { } rawScopeProvider
50-
? rawScopeProvider.DuckCast<IExternalScopeProvider>()
51-
: instance.DuckCast<ExtendedLoggerFactoryProxy>().ScopeProvider;
52-
53-
if (LoggerFactoryIntegrationCommon<TTarget>.TryAddDirectSubmissionLoggerProvider(instance, scopeProvider))
54-
{
55-
TracerManager.Instance.Telemetry.IntegrationGeneratedSpan(IntegrationId.ILogger);
56-
}
57-
58-
return CallTargetReturn.GetDefault();
59-
}
37+
=> ExtendedLoggerFactoryCommon.OnMethodEnd(instance, exception, in state);
6038
}

0 commit comments

Comments
 (0)