diff --git a/CHANGELOG.md b/CHANGELOG.md index bcd5653686..83ae4b06f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## Unreleased +### Fixes + +- Structured Logs now have a `sentry.origin` attribute to so it's clearer where these come from ([#4566](https://github.com/getsentry/sentry-dotnet/pull/4566)) + ### Dependencies - Bump Java SDK from v8.22.0 to v8.23.0 ([#4586](https://github.com/getsentry/sentry-dotnet/pull/4586)) diff --git a/src/Sentry.Extensions.Logging/SentryStructuredLogger.cs b/src/Sentry.Extensions.Logging/SentryStructuredLogger.cs index 23f549e0d0..43cb0f17a7 100644 --- a/src/Sentry.Extensions.Logging/SentryStructuredLogger.cs +++ b/src/Sentry.Extensions.Logging/SentryStructuredLogger.cs @@ -89,6 +89,7 @@ public void Log(LogLevel logLevel, EventId eventId, TState state, Except }; log.SetDefaultAttributes(_options, _sdk); + log.SetOrigin("auto.log.extensions_logging"); if (_categoryName is not null) { diff --git a/src/Sentry.Serilog/SentrySink.Structured.cs b/src/Sentry.Serilog/SentrySink.Structured.cs index 5b22ab7d97..41e3f95693 100644 --- a/src/Sentry.Serilog/SentrySink.Structured.cs +++ b/src/Sentry.Serilog/SentrySink.Structured.cs @@ -18,6 +18,7 @@ private static void CaptureStructuredLog(IHub hub, SentryOptions options, LogEve }; log.SetDefaultAttributes(options, Sdk); + log.SetOrigin("auto.log.serilog"); foreach (var attribute in attributes) { diff --git a/src/Sentry/SentryLog.cs b/src/Sentry/SentryLog.cs index 844d71a778..b3f7b78f5c 100644 --- a/src/Sentry/SentryLog.cs +++ b/src/Sentry/SentryLog.cs @@ -184,6 +184,11 @@ internal void SetDefaultAttributes(SentryOptions options, SdkVersion sdk) } } + internal void SetOrigin(string origin) + { + SetAttribute("sentry.origin", origin); + } + internal void WriteTo(Utf8JsonWriter writer, IDiagnosticLogger? logger) { writer.WriteStartObject(); diff --git a/test/Sentry.AspNetCore.Tests/SentryAspNetCoreStructuredLoggerProviderTests.cs b/test/Sentry.AspNetCore.Tests/SentryAspNetCoreStructuredLoggerProviderTests.cs index 797aedf435..d19cdf5cc4 100644 --- a/test/Sentry.AspNetCore.Tests/SentryAspNetCoreStructuredLoggerProviderTests.cs +++ b/test/Sentry.AspNetCore.Tests/SentryAspNetCoreStructuredLoggerProviderTests.cs @@ -91,6 +91,9 @@ public void CreateLogger_DependencyInjection_CanLog() capturedLog.TryGetAttribute("sentry.sdk.version", out object? version).Should().BeTrue(); version.Should().Be(SentryMiddleware.NameAndVersion.Version); + + capturedLog.TryGetAttribute("sentry.origin", out object? origin).Should().BeTrue(); + origin.Should().Be("auto.log.extensions_logging"); } [Fact] diff --git a/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerProviderTests.cs b/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerProviderTests.cs index cb48224c51..a8c52f13da 100644 --- a/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerProviderTests.cs +++ b/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerProviderTests.cs @@ -91,6 +91,9 @@ public void CreateLogger_DependencyInjection_CanLog() capturedLog.TryGetAttribute("sentry.sdk.version", out object? version).Should().BeTrue(); version.Should().Be(SentryLoggerProvider.NameAndVersion.Version); + + capturedLog.TryGetAttribute("sentry.origin", out object? origin).Should().BeTrue(); + origin.Should().Be("auto.log.extensions_logging"); } [Fact] diff --git a/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerTests.cs b/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerTests.cs index f810fd9d14..dbede60ff9 100644 --- a/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerTests.cs +++ b/test/Sentry.Extensions.Logging.Tests/SentryStructuredLoggerTests.cs @@ -111,6 +111,7 @@ public void Log_LogLevel_CaptureLog(LogLevel logLevel, SentryLogLevel expectedLe log.ParentSpanId.Should().Be(parentSpanId); log.AssertAttribute("sentry.environment", "my-environment"); log.AssertAttribute("sentry.release", "my-release"); + log.AssertAttribute("sentry.origin", "auto.log.extensions_logging"); log.AssertAttribute("sentry.sdk.name", "SDK Name"); log.AssertAttribute("sentry.sdk.version", "SDK Version"); log.AssertAttribute("category.name", _fixture.CategoryName); diff --git a/test/Sentry.Serilog.Tests/SentrySinkTests.Structured.cs b/test/Sentry.Serilog.Tests/SentrySinkTests.Structured.cs index 7b98e8181c..dd1f44928d 100644 --- a/test/Sentry.Serilog.Tests/SentrySinkTests.Structured.cs +++ b/test/Sentry.Serilog.Tests/SentrySinkTests.Structured.cs @@ -118,6 +118,8 @@ public void Emit_StructuredLogging_LogEvent(bool withActiveSpan) environment.Should().Be("test-environment"); log.TryGetAttribute("sentry.release", out object? release).Should().BeTrue(); release.Should().Be("test-release"); + log.TryGetAttribute("sentry.origin", out object? origin).Should().BeTrue(); + origin.Should().Be("auto.log.serilog"); log.TryGetAttribute("sentry.sdk.name", out object? sdkName).Should().BeTrue(); sdkName.Should().Be(SentrySink.SdkName); log.TryGetAttribute("sentry.sdk.version", out object? sdkVersion).Should().BeTrue(); diff --git a/test/Sentry.Tests/SentryLogTests.cs b/test/Sentry.Tests/SentryLogTests.cs index c53c6711de..505249b95e 100644 --- a/test/Sentry.Tests/SentryLogTests.cs +++ b/test/Sentry.Tests/SentryLogTests.cs @@ -53,6 +53,9 @@ public void Protocol_Default_VerifyAttributes() log.Parameters.Should().BeEquivalentTo(new KeyValuePair[] { new("param", "params"), }); log.ParentSpanId.Should().Be(ParentSpanId); + // should only show up in sdk integrations + log.TryGetAttribute("sentry.origin", out object origin).Should().BeFalse(); + log.TryGetAttribute("attribute", out object attribute).Should().BeTrue(); attribute.Should().Be("value"); log.TryGetAttribute("sentry.environment", out string environment).Should().BeTrue();