From e197190ab3443187354d1806d245b83c21277f55 Mon Sep 17 00:00:00 2001 From: Matt Johnson-Pint Date: Sat, 15 Oct 2022 16:05:01 -0700 Subject: [PATCH 1/3] Send ALL events to the SentryLogger --- .../LoggingBuilderExtensions.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/Sentry.Extensions.Logging/LoggingBuilderExtensions.cs b/src/Sentry.Extensions.Logging/LoggingBuilderExtensions.cs index de466a8f00..3bafd79917 100644 --- a/src/Sentry.Extensions.Logging/LoggingBuilderExtensions.cs +++ b/src/Sentry.Extensions.Logging/LoggingBuilderExtensions.cs @@ -43,14 +43,20 @@ public static ILoggingBuilder AddSentry(this ILoggingBuilder builder, string dsn if (optionsConfiguration != null) { - _ = builder.Services.Configure(optionsConfiguration); + builder.Services.Configure(optionsConfiguration); } - _ = builder.Services.AddSingleton, SentryLoggingOptionsSetup>(); + builder.Services.AddSingleton, SentryLoggingOptionsSetup>(); - _ = builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + + builder.Services.AddSentry(); + + // All logs should flow to the SentryLogger, regardless of level. + // Filtering of events is handled in SentryLogger, using SentryOptions.MinimumEventLevel + // Filtering of breadcrumbs is handled in SentryLogger, using SentryOptions.MinimumBreadcrumbLevel + builder.AddFilter(_ => true); - _ = builder.Services.AddSentry(); return builder; } } From 6d91427b782a6439d8980db8d3568df26ae29fa5 Mon Sep 17 00:00:00 2001 From: Matt Johnson-Pint Date: Sat, 15 Oct 2022 16:05:11 -0700 Subject: [PATCH 2/3] Add tests --- .../LoggingTests.cs | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 test/Sentry.Extensions.Logging.Tests/LoggingTests.cs diff --git a/test/Sentry.Extensions.Logging.Tests/LoggingTests.cs b/test/Sentry.Extensions.Logging.Tests/LoggingTests.cs new file mode 100644 index 0000000000..0eba0776c9 --- /dev/null +++ b/test/Sentry.Extensions.Logging.Tests/LoggingTests.cs @@ -0,0 +1,92 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; + +namespace Sentry.Extensions.Logging.Tests; + +public class LoggingTests +{ + [Theory] + [InlineData(LogLevel.Critical)] + [InlineData(LogLevel.Error)] + [InlineData(LogLevel.Warning)] + [InlineData(LogLevel.Information)] + [InlineData(LogLevel.Debug)] + [InlineData(LogLevel.Trace)] + public void Log_CapturesEvent(LogLevel logLevel) + { + // Arrange + var worker = Substitute.For(); + + var serviceCollection = new ServiceCollection(); + serviceCollection.AddLogging(builder => builder.AddSentry(o => + { + o.Dsn = ValidDsn; + o.MinimumEventLevel = logLevel; + o.MinimumBreadcrumbLevel = LogLevel.None; + o.BackgroundWorker = worker; + })); + using var serviceProvider = serviceCollection.BuildServiceProvider(); + using var loggerFactory = serviceProvider.GetRequiredService(); + + // Act + const string message = "test message"; + var logger = loggerFactory.CreateLogger("test"); + logger.Log(logLevel, message); + + // Assert + worker.Received(1).EnqueueEnvelope( + Arg.Is(e => + e.Items + .Select(i => i.Payload).OfType() + .Select(i => i.Source).OfType() + .SingleOrDefault(evt => + evt.Level == logLevel.ToSentryLevel() && + evt.Message.Message == message) + != null)); + } + + [Theory] + [InlineData(LogLevel.Critical)] + [InlineData(LogLevel.Error)] + [InlineData(LogLevel.Warning)] + [InlineData(LogLevel.Information)] + [InlineData(LogLevel.Debug)] + [InlineData(LogLevel.Trace)] + public void Log_AddsBreadcrumb(LogLevel logLevel) + { + // Arrange + var worker = Substitute.For(); + + var serviceCollection = new ServiceCollection(); + serviceCollection.AddLogging(builder => builder.AddSentry(o => + { + o.Dsn = ValidDsn; + o.MinimumBreadcrumbLevel = logLevel; + o.MinimumEventLevel = LogLevel.None; + o.BackgroundWorker = worker; + })); + using var serviceProvider = serviceCollection.BuildServiceProvider(); + using var loggerFactory = serviceProvider.GetRequiredService(); + + // Act + const string message = "test message"; + var logger = loggerFactory.CreateLogger("test"); + logger.Log(logLevel, message); + + var hub = serviceProvider.GetRequiredService(); + hub.CaptureEvent(new SentryEvent()); + + // Assert + worker.Received(1).EnqueueEnvelope( + Arg.Is(e => + e.Items + .Select(i => i.Payload).OfType() + .Select(i => i.Source).OfType() + .Single() + .Breadcrumbs + .SingleOrDefault(b => + b.Level == logLevel.ToBreadcrumbLevel() && + b.Message == message) + != null)); + } +} From 964bb8300b69726a5673d241ef8e258aec2293eb Mon Sep 17 00:00:00 2001 From: Matt Johnson-Pint Date: Sat, 15 Oct 2022 16:08:39 -0700 Subject: [PATCH 3/3] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3380cd67f3..9282b56ceb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ - NuGet package `Sentry` now depends on `Sentry.Bindings.Android` for `net6.0-android` targets. - NuGet package `Sentry` now depends on `Sentry.Bindings.Cocoa` for `net6.0-ios` and `net6.0-maccatalyst` targets. - Exclude EF error message from logging ([#1980](https://github.com/getsentry/sentry-dotnet/pull/1980)) +- Ensure logs with lower levels are captured by `Sentry.Extensions.Logging` ([#1992](https://github.com/getsentry/sentry-dotnet/pull/1992)) ## 3.22.0