diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md index 6955d84279df5..476543986c3e9 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/CHANGELOG.md @@ -1,5 +1,25 @@ # Release History +## 1.3.0-beta.1 (Unreleased) + +### Features Added + +### Breaking Changes + +### Bugs Fixed + +### Other Changes + +* Enabled support for log collection from Azure SDKs via `Microsoft.Extensions.Logging`. + See [Logging with the Azure SDK for .NET](https://learn.microsoft.com/dotnet/azure/sdk/logging) for the details. + (This feature was originally introduced in 1.2.0-beta.2) + ([#44511](https://github.com/Azure/azure-sdk-for-net/pull/44511)) + +* Added an experimental feature for logs emitted within an active tracing context to follow the Activity's sampling decision. + The feature can be enabled by setting `OTEL_DOTNET_AZURE_MONITOR_EXPERIMENTAL_ENABLE_LOG_SAMPLING` environment variable to `true`. + (This feature was originally introduced in 1.2.0-beta.1) + ([#44511](https://github.com/Azure/azure-sdk-for-net/pull/44511)) + ## 1.2.0 (2024-06-11) ### Other Changes diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/Azure.Monitor.OpenTelemetry.AspNetCore.csproj b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/Azure.Monitor.OpenTelemetry.AspNetCore.csproj index b312bf7654d75..bb2fac3efb9ea 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/Azure.Monitor.OpenTelemetry.AspNetCore.csproj +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/Azure.Monitor.OpenTelemetry.AspNetCore.csproj @@ -2,10 +2,9 @@ An OpenTelemetry .NET distro that exports to Azure Monitor AzureMonitor OpenTelemetry ASP.NET Core Distro - 1.2.0 + 1.3.0-beta.1 - - 1.1.0 + 1.2.0 Azure Monitor OpenTelemetry Exporter Distro ApplicationInsights net6.0;$(RequiredTargetFrameworks) true @@ -24,10 +23,10 @@ - + - + diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs index 90bd949c4de11..039601286e4aa 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/src/OpenTelemetryBuilderExtensions.cs @@ -157,10 +157,7 @@ public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder bui .Configure>((loggingOptions, azureOptions) => { var azureMonitorOptions = azureOptions.Get(Options.DefaultName); - loggingOptions.AddAzureMonitorLogExporter(o => azureMonitorOptions.SetValueToExporterOptions(o)); - // TODO:WILL RE-ENABLE IN NEXT BETA - /* bool enableLogSampling = false; try { @@ -182,7 +179,6 @@ public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder bui { loggingOptions.AddAzureMonitorLogExporter(o => azureMonitorOptions.SetValueToExporterOptions(o)); } - */ if (azureMonitorOptions.EnableLiveMetrics) { @@ -204,21 +200,20 @@ public static OpenTelemetryBuilder UseAzureMonitor(this OpenTelemetryBuilder bui azureMonitorOptions.Get(Options.DefaultName).SetValueToExporterOptions(exporterOptions); }); - // TODO: WILL RE-ENABLE IN NEXT BETA // Register Azure SDK log forwarder in the case it was not registered by the user application. - //builder.Services.AddHostedService(sp => - //{ - // var logForwarderType = Type.GetType("Microsoft.Extensions.Azure.AzureEventSourceLogForwarder, Microsoft.Extensions.Azure", false); + builder.Services.AddHostedService(sp => + { + var logForwarderType = Type.GetType("Microsoft.Extensions.Azure.AzureEventSourceLogForwarder, Microsoft.Extensions.Azure", false); - // if (logForwarderType != null && sp.GetService(logForwarderType) != null) - // { - // AzureMonitorAspNetCoreEventSource.Log.LogForwarderIsAlreadyRegistered(); - // return AzureEventSourceLogForwarder.Noop; - // } + if (logForwarderType != null && sp.GetService(logForwarderType) != null) + { + AzureMonitorAspNetCoreEventSource.Log.LogForwarderIsAlreadyRegistered(); + return AzureEventSourceLogForwarder.Noop; + } - // var loggerFactory = sp.GetRequiredService(); - // return new AzureEventSourceLogForwarder(loggerFactory); - //}); + var loggerFactory = sp.GetRequiredService(); + return new AzureEventSourceLogForwarder(loggerFactory); + }); // Register Manager as a singleton builder.Services.AddSingleton(sp => diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/tests/Azure.Monitor.OpenTelemetry.AspNetCore.Tests/AzureSdkLoggingTests.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/tests/Azure.Monitor.OpenTelemetry.AspNetCore.Tests/AzureSdkLoggingTests.cs index ba11c2cf3b789..d2b336bb29325 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/tests/Azure.Monitor.OpenTelemetry.AspNetCore.Tests/AzureSdkLoggingTests.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.AspNetCore/tests/Azure.Monitor.OpenTelemetry.AspNetCore.Tests/AzureSdkLoggingTests.cs @@ -22,12 +22,11 @@ namespace Azure.Monitor.OpenTelemetry.AspNetCore.Tests { public class AzureSdkLoggingTests { - [Theory(Skip = "Temporary skip for stable release")] - //#if NET6_0 - // [ConditionallySkipOSTheory(platformToSkip: "macos", reason: "This test consistently exceeds 1 hour runtime limit when running on MacOS & Net60")] - //#else - // [Theory] - //#endif +#if NET6_0 + [ConditionallySkipOSTheory(platformToSkip: "macos", reason: "This test consistently exceeds 1 hour runtime limit when running on MacOS & Net60")] +#else + [Theory] +#endif [InlineData(LogLevel.Information, "TestInfoEvent: hello")] [InlineData(LogLevel.Warning, "TestWarningEvent: hello")] [InlineData(LogLevel.Debug, null)] @@ -55,12 +54,11 @@ public async Task DistroLogForwarderIsAdded(LogLevel eventLevel, string expected } } - [Theory(Skip = "Temporary skip for stable release")] - //#if NET6_0 - // [ConditionallySkipOSTheory(platformToSkip: "macos", reason: "This test consistently exceeds 1 hour runtime limit when running on MacOS & Net60")] - //#else - // [Theory] - //#endif +#if NET6_0 + [ConditionallySkipOSTheory(platformToSkip: "macos", reason: "This test consistently exceeds 1 hour runtime limit when running on MacOS & Net60")] +#else + [Theory] +#endif [InlineData(LogLevel.Information, "TestInfoEvent: hello")] [InlineData(LogLevel.Warning, "TestWarningEvent: hello")] [InlineData(LogLevel.Debug, null)] @@ -97,12 +95,11 @@ public async Task PublicLogForwarderIsAdded(LogLevel eventLevel, string expected } } - [Fact(Skip = "Temporary skip for stable release")] - //#if NET6_0 - // [ConditionallySkipOSFact(platformToSkip: "macos", reason: "This test consistently exceeds 1 hour runtime limit when running on MacOS & Net60")] - //#else - // [Fact] - //#endif +#if NET6_0 + [ConditionallySkipOSFact(platformToSkip: "macos", reason: "This test consistently exceeds 1 hour runtime limit when running on MacOS & Net60")] +#else + [Fact] +#endif public async Task SelfDiagnosticsIsDisabled() { var enableLevel = LogLevel.Debug; diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md index 12efefad55b7f..1ddb30265bffe 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/CHANGELOG.md @@ -10,6 +10,11 @@ ### Other Changes +* Changed `AzureMonitorLogExporter` to be public. + This will allow users to write custom processors for filtering logs. + (This feature was originally introduced in 1.3.0-beta.1) + ([#44511](https://github.com/Azure/azure-sdk-for-net/pull/44511)) + ## 1.3.0 (2024-06-07) ### Other Changes diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.net6.0.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.net6.0.cs index df4fa7a160503..af36420e34cb6 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.net6.0.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.net6.0.cs @@ -21,4 +21,10 @@ public enum ServiceVersion v2_1 = 1, } } + public sealed partial class AzureMonitorLogExporter : OpenTelemetry.BaseExporter + { + public AzureMonitorLogExporter(Azure.Monitor.OpenTelemetry.Exporter.AzureMonitorExporterOptions options) { } + protected override void Dispose(bool disposing) { } + public override OpenTelemetry.ExportResult Export(in OpenTelemetry.Batch batch) { throw null; } + } } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.netstandard2.0.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.netstandard2.0.cs index df4fa7a160503..af36420e34cb6 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.netstandard2.0.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/api/Azure.Monitor.OpenTelemetry.Exporter.netstandard2.0.cs @@ -21,4 +21,10 @@ public enum ServiceVersion v2_1 = 1, } } + public sealed partial class AzureMonitorLogExporter : OpenTelemetry.BaseExporter + { + public AzureMonitorLogExporter(Azure.Monitor.OpenTelemetry.Exporter.AzureMonitorExporterOptions options) { } + protected override void Dispose(bool disposing) { } + public override OpenTelemetry.ExportResult Export(in OpenTelemetry.Batch batch) { throw null; } + } } diff --git a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/AzureMonitorLogExporter.cs b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/AzureMonitorLogExporter.cs index fc6848fdd0eb5..6e0b8920d2888 100644 --- a/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/AzureMonitorLogExporter.cs +++ b/sdk/monitor/Azure.Monitor.OpenTelemetry.Exporter/src/AzureMonitorLogExporter.cs @@ -14,7 +14,7 @@ namespace Azure.Monitor.OpenTelemetry.Exporter /// /// Azure Monitor Log Exporter. /// - internal sealed class AzureMonitorLogExporter : BaseExporter + public sealed class AzureMonitorLogExporter : BaseExporter { private readonly ITransmitter _transmitter; private readonly string _instrumentationKey;