Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions src/Sentry.Serilog/SentrySinkExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,41 @@ namespace Serilog;
[EditorBrowsable(EditorBrowsableState.Never)]
public static class SentrySinkExtensions
{
private const string ObsoleteDsnOverload =
"The Sentry sink no longer initializes the SDK, so a DSN can no longer be supplied to it. " +
"Initialize Sentry with SentrySdk.Init (or an integration such as UseSentry), call UseSerilog() " +
"on those options, and remove 'dsn' and any other core SDK settings from the sink configuration.";

/// <summary>
/// Not supported. The Sentry sink no longer initializes the SDK.
/// </summary>
/// <remarks>
/// This overload only exists so that configuration providers that bind sink arguments by name (such as
/// <c>Serilog.Settings.Configuration</c> reading <c>appsettings.json</c>) fail loudly instead of silently
/// dropping a <c>dsn</c> that no longer has any effect. It always throws.
/// </remarks>
/// <param name="loggerConfiguration">The logger configuration. <seealso cref="LoggerSinkConfiguration"/></param>
/// <param name="dsn">No longer supported. <seealso cref="SentryOptions.Dsn"/></param>
/// <param name="minimumEventLevel">Minimum log level to send an event. <seealso cref="SentrySerilogOptions.MinimumEventLevel"/></param>
/// <param name="minimumBreadcrumbLevel">Minimum log level to record a breadcrumb. <seealso cref="SentrySerilogOptions.MinimumBreadcrumbLevel"/></param>
/// <param name="formatProvider">The Serilog format provider. <seealso cref="IFormatProvider"/></param>
/// <param name="textFormatter">The Serilog text formatter. <seealso cref="ITextFormatter"/></param>
/// <param name="restrictedToMinimumLevel">The minimum level for events passed through the sink. <seealso cref="SentrySerilogOptions.RestrictedToMinimumLevel"/></param>
/// <param name="levelSwitch">A switch allowing the pass-through minimum level to be changed at runtime. <seealso cref="SentrySerilogOptions.LevelSwitch"/></param>
/// <returns>Never returns.</returns>
/// <exception cref="NotSupportedException">Always.</exception>
[Obsolete(ObsoleteDsnOverload, error: true)]
public static LoggerConfiguration Sentry(
this LoggerSinkConfiguration loggerConfiguration,
string dsn,
LogEventLevel? minimumEventLevel = null,
LogEventLevel? minimumBreadcrumbLevel = null,
IFormatProvider? formatProvider = null,
ITextFormatter? textFormatter = null,
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
LoggingLevelSwitch? levelSwitch = null)
=> throw new NotSupportedException(ObsoleteDsnOverload);

/// <summary>
/// <para>Adds a Sentry Sink for Serilog.</para>
/// <remarks>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ namespace Serilog
{
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, System.Action<Sentry.Serilog.SentrySerilogOptions> configureOptions) { }
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
[System.Obsolete(@"The Sentry sink no longer initializes the SDK, so a DSN can no longer be supplied to it. Initialize Sentry with SentrySdk.Init (or an integration such as UseSentry), call UseSerilog() on those options, and remove 'dsn' and any other core SDK settings from the sink configuration.", true)]
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, string dsn, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ namespace Serilog
{
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, System.Action<Sentry.Serilog.SentrySerilogOptions> configureOptions) { }
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
[System.Obsolete(@"The Sentry sink no longer initializes the SDK, so a DSN can no longer be supplied to it. Initialize Sentry with SentrySdk.Init (or an integration such as UseSentry), call UseSerilog() on those options, and remove 'dsn' and any other core SDK settings from the sink configuration.", true)]
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, string dsn, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ namespace Serilog
{
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, System.Action<Sentry.Serilog.SentrySerilogOptions> configureOptions) { }
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
[System.Obsolete(@"The Sentry sink no longer initializes the SDK, so a DSN can no longer be supplied to it. Initialize Sentry with SentrySdk.Init (or an integration such as UseSentry), call UseSerilog() on those options, and remove 'dsn' and any other core SDK settings from the sink configuration.", true)]
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, string dsn, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ namespace Serilog
{
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, System.Action<Sentry.Serilog.SentrySerilogOptions> configureOptions) { }
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
[System.Obsolete(@"The Sentry sink no longer initializes the SDK, so a DSN can no longer be supplied to it. Initialize Sentry with SentrySdk.Init (or an integration such as UseSentry), call UseSerilog() on those options, and remove 'dsn' and any other core SDK settings from the sink configuration.", true)]
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, string dsn, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,7 @@ namespace Serilog
{
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, System.Action<Sentry.Serilog.SentrySerilogOptions> configureOptions) { }
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
[System.Obsolete(@"The Sentry sink no longer initializes the SDK, so a DSN can no longer be supplied to it. Initialize Sentry with SentrySdk.Init (or an integration such as UseSentry), call UseSerilog() on those options, and remove 'dsn' and any other core SDK settings from the sink configuration.", true)]
public static Serilog.LoggerConfiguration Sentry(this Serilog.Configuration.LoggerSinkConfiguration loggerConfiguration, string dsn, Serilog.Events.LogEventLevel? minimumEventLevel = default, Serilog.Events.LogEventLevel? minimumBreadcrumbLevel = default, System.IFormatProvider? formatProvider = null, Serilog.Formatting.ITextFormatter? textFormatter = null, Serilog.Events.LogEventLevel restrictedToMinimumLevel = 0, Serilog.Core.LoggingLevelSwitch? levelSwitch = null) { }
}
}
35 changes: 35 additions & 0 deletions test/Sentry.Serilog.Tests/SentrySerilogSinkExtensionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,41 @@ public void Sentry_WithRestrictedToMinimumLevel_ParameterIsAccepted()
Assert.Null(ex);
}

[Fact]
public void Sentry_DsnOverload_InvokedByName_Throws()
{
var method = typeof(SentrySinkExtensions)
.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Single(m => m.Name == nameof(SentrySinkExtensions.Sentry)
&& m.GetParameters().Any(p => p.Name == "dsn"));

var arguments = method.GetParameters()
.Select(p => p.Name == "dsn"
? "https://key@sentry.io/1"
: p.HasDefaultValue ? p.DefaultValue : null)
.ToArray();
arguments[0] = new LoggerConfiguration().WriteTo;

var exception = Assert.Throws<TargetInvocationException>(() => method.Invoke(null, arguments));

Assert.IsType<NotSupportedException>(exception.InnerException);
Assert.Contains("no longer initializes the SDK", exception.InnerException!.Message);
}

[Fact]
public void Sentry_DsnOverload_IsObsoleteAsError()
{
var method = typeof(SentrySinkExtensions)
.GetMethods(BindingFlags.Public | BindingFlags.Static)
.Single(m => m.Name == nameof(SentrySinkExtensions.Sentry)
&& m.GetParameters().Any(p => p.Name == "dsn"));

var obsolete = method.GetCustomAttribute<ObsoleteAttribute>();

Assert.NotNull(obsolete);
Assert.True(obsolete!.IsError);
}

private static void AssertEqualDeep(object expected, object actual)
{
var serializedLeftObject = JsonSerializer.Serialize(expected);
Expand Down
Loading