diff --git a/.gitignore b/.gitignore index f8d880a8e7..23c230d87a 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ test/**/*.apk /tools/ *.log .sentry-native +**/EnvironmentVariables.g.cs # Download cache for Cocoa SDK modules/sentry-cocoa diff --git a/Directory.Build.props b/Directory.Build.props index f4b108ce6e..0387cff596 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -67,6 +67,11 @@ $(DefineConstants);CI_BUILD + + + $(DefineConstants);SENTRY_DSN_DEFINED_IN_ENV + + diff --git a/samples/Directory.Build.targets b/samples/Directory.Build.targets index 59c5962462..d8a727cf4f 100644 --- a/samples/Directory.Build.targets +++ b/samples/Directory.Build.targets @@ -7,4 +7,44 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/SamplesShared.cs b/samples/SamplesShared.cs new file mode 100644 index 0000000000..14afcb5f14 --- /dev/null +++ b/samples/SamplesShared.cs @@ -0,0 +1,23 @@ +namespace Sentry.Samples; + +public static class SamplesShared +{ +#if !SENTRY_DSN_DEFINED_IN_ENV + /// + /// + /// You must specify a DSN. See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + /// + /// + /// On mobile platforms (iOS, Android or MacCatalyst), this should be done in code. + /// + /// + /// On other platforms you can set this in code and it is also possible to set this via an environment variable or + /// via configuration bindings (e.g. in an app.config or an appsettings.json file). + /// + /// +#if !CI_BUILD +#error Sign up for a free Sentry Account and enter your DSN here +#endif + public const string Dsn = "ENTER_YOUR_DSN_HERE"; +#endif +} diff --git a/samples/Sentry.Samples.Android/MainActivity.cs b/samples/Sentry.Samples.Android/MainActivity.cs index e098254833..5fc26de941 100644 --- a/samples/Sentry.Samples.Android/MainActivity.cs +++ b/samples/Sentry.Samples.Android/MainActivity.cs @@ -9,7 +9,17 @@ protected override void OnCreate(Bundle? savedInstanceState) { SentrySdk.Init(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // You must specify a DSN. On mobile platforms, this should be done in code here. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#else + // To make things easier for the SDK maintainers our samples check for a SENTRY_DSN environment variable + // and write this (as a constant) into an EnvironmentVariables class. Generally, you won't want to do + // this in your own mobile projects though - you should set the DSN in code as above + options.Dsn = EnvironmentVariables.Dsn; +#endif + options.SendDefaultPii = true; // adds the user's IP address automatically // Android specific .NET features are under the Android properties: diff --git a/samples/Sentry.Samples.AspNetCore.Basic/Program.cs b/samples/Sentry.Samples.AspNetCore.Basic/Program.cs index a5757beb4f..e4767ad918 100644 --- a/samples/Sentry.Samples.AspNetCore.Basic/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.Basic/Program.cs @@ -2,8 +2,11 @@ builder.WebHost.UseSentry(options => { - // A DSN is required. You can set it here, or in configuration, or in an environment variable. - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif // Enable Sentry performance monitoring options.TracesSampleRate = 1.0; diff --git a/samples/Sentry.Samples.AspNetCore.Blazor.Server/Program.cs b/samples/Sentry.Samples.AspNetCore.Blazor.Server/Program.cs index 56f7712796..1dadefa78c 100644 --- a/samples/Sentry.Samples.AspNetCore.Blazor.Server/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.Blazor.Server/Program.cs @@ -6,7 +6,11 @@ builder.Services.AddServerSideBlazor(); builder.WebHost.UseSentry(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, in the SENTRY_DSN environment variable or in your appsettings.json + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif options.TracesSampleRate = 1.0; options.Debug = true; }); diff --git a/samples/Sentry.Samples.AspNetCore.Blazor.Wasm/Program.cs b/samples/Sentry.Samples.AspNetCore.Blazor.Wasm/Program.cs index a102863568..77092780bd 100644 --- a/samples/Sentry.Samples.AspNetCore.Blazor.Wasm/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.Blazor.Wasm/Program.cs @@ -6,7 +6,11 @@ var builder = WebAssemblyHostBuilder.CreateDefault(args); builder.UseSentry(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif options.Debug = true; }); diff --git a/samples/Sentry.Samples.AspNetCore.Grpc/Program.cs b/samples/Sentry.Samples.AspNetCore.Grpc/Program.cs index b8b0223932..cdd26f9eb0 100644 --- a/samples/Sentry.Samples.AspNetCore.Grpc/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.Grpc/Program.cs @@ -31,6 +31,13 @@ public static IWebHost BuildWebHost(string[] args) => builder.AddGrpc(); builder.AddSentryOptions(options => { +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, via the SENTRY_DSN environment variable or in your + // appsettings.json file. + // See https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/#configure + options.Dsn = SamplesShared.Dsn; +#endif + // The parameter 'options' here has values populated through the configuration system. // That includes 'appsettings.json', environment variables and anything else // defined on the ConfigurationBuilder. diff --git a/samples/Sentry.Samples.AspNetCore.Grpc/appsettings.json b/samples/Sentry.Samples.AspNetCore.Grpc/appsettings.json index 9f71ea4fe0..39d46b6bf1 100644 --- a/samples/Sentry.Samples.AspNetCore.Grpc/appsettings.json +++ b/samples/Sentry.Samples.AspNetCore.Grpc/appsettings.json @@ -3,7 +3,7 @@ // All Sentry settings can also be configured via code or environment variables: "Sentry": { // The DSN can also be set via environment variable - "Dsn": "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537", + //"Dsn": "TODO: Configure your DSN here and uncomment this line", // Opt-in for payload submission "MaxRequestBodySize": "Always", // Sends Cookies, User Id when one is logged on and user IP address to sentry. It's turned off by default. diff --git a/samples/Sentry.Samples.AspNetCore.Mvc/Program.cs b/samples/Sentry.Samples.AspNetCore.Mvc/Program.cs index 968e11cbc2..f119daa5ac 100644 --- a/samples/Sentry.Samples.AspNetCore.Mvc/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.Mvc/Program.cs @@ -11,6 +11,13 @@ // See: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-8.0 builder.WebHost.UseSentry(options => { +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, via the SENTRY_DSN environment variable or in your + // appsettings.json file. + // See https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/#configure + options.Dsn = SamplesShared.Dsn; +#endif + // Tracks the release which sent the event and enables more features: https://docs.sentry.io/learn/releases/ // If not explicitly set here, the SDK attempts to read it from: AssemblyInformationalVersionAttribute and AssemblyVersion // TeamCity: %build.vcs.number%, VSTS: BUILD_SOURCEVERSION, Travis-CI: TRAVIS_COMMIT, AppVeyor: APPVEYOR_REPO_COMMIT, CircleCI: CIRCLE_SHA1 diff --git a/samples/Sentry.Samples.AspNetCore.Mvc/appsettings.json b/samples/Sentry.Samples.AspNetCore.Mvc/appsettings.json index 43799f65ea..ab7be6a3ac 100644 --- a/samples/Sentry.Samples.AspNetCore.Mvc/appsettings.json +++ b/samples/Sentry.Samples.AspNetCore.Mvc/appsettings.json @@ -3,7 +3,7 @@ // All Sentry settings can also be configured via code or environment variables: "Sentry": { // The DSN can also be set via environment variable - "Dsn": "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537", + //"Dsn": "TODO: Configure your DSN here and uncomment this line", // Opt-in for payload submission "MaxRequestBodySize": "Always", // Sends Cookies, User Id when one is logged on and user IP address to sentry. It's turned off by default. diff --git a/samples/Sentry.Samples.AspNetCore.Serilog/Program.cs b/samples/Sentry.Samples.AspNetCore.Serilog/Program.cs index f78d2381f6..6aa5d6b535 100644 --- a/samples/Sentry.Samples.AspNetCore.Serilog/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.Serilog/Program.cs @@ -25,10 +25,14 @@ public static WebApplication BuildWebApp(string[] args) })); // Add Sentry integration - // It can be defined via configuration (including `appsettings.json`, as we do here) + // It can be defined via configuration (including `appsettings.json`) // or coded explicitly, via parameter like: // .UseSentry("dsn") or .UseSentry(o => o.Dsn = ""; o.Release = "1.0"; ...) - builder.WebHost.UseSentry(); +#if !SENTRY_DSN_DEFINED_IN_ENV + builder.WebHost.UseSentry(SamplesShared.Dsn); +#else + builder.WebHost.UseSentry(EnvironmentVariables.Dsn); +#endif // The App: var webApplication = builder.Build(); diff --git a/samples/Sentry.Samples.AspNetCore.Serilog/appsettings.json b/samples/Sentry.Samples.AspNetCore.Serilog/appsettings.json index 5622bda313..4c79a92f2b 100644 --- a/samples/Sentry.Samples.AspNetCore.Serilog/appsettings.json +++ b/samples/Sentry.Samples.AspNetCore.Serilog/appsettings.json @@ -3,7 +3,7 @@ // All Sentry settings can also be configured via code or environment variables: "Sentry": { // The DSN can also be set via environment variable - "Dsn": "https://b887218a80114d26a9b1a51c5f88e0b4@o447951.ingest.sentry.io/6601807", + //"Dsn": "TODO: Configure your DSN here and uncomment this line", // Enable Sentry tracing features "EnableTracing": true, // Opt-in for payload submission diff --git a/samples/Sentry.Samples.AspNetCore.WebAPI.Profiling/Program.cs b/samples/Sentry.Samples.AspNetCore.WebAPI.Profiling/Program.cs index 07b0147102..673b3d7f57 100644 --- a/samples/Sentry.Samples.AspNetCore.WebAPI.Profiling/Program.cs +++ b/samples/Sentry.Samples.AspNetCore.WebAPI.Profiling/Program.cs @@ -2,7 +2,11 @@ builder.WebHost.UseSentry(o => { - o.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, in the SENTRY_DSN environment variable or in your appsettings.json + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + o.Dsn = SamplesShared.Dsn; +#endif o.AddProfilingIntegration(); o.ProfilesSampleRate = 0.1; o.TracesSampleRate = 1.0; diff --git a/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/LambdaEntryPoint.cs b/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/LambdaEntryPoint.cs index 8ccf6592b6..a2ac2301a2 100644 --- a/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/LambdaEntryPoint.cs +++ b/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/LambdaEntryPoint.cs @@ -4,8 +4,15 @@ public class LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFu protected override void Init(IWebHostBuilder builder) { builder - // Add Sentry (configuration was done via appsettings.json but could be done programatically): +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set it here in code, via the SENTRY_DSN environment variable or in your + // appsettings.json file. + // See https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/#configure + .UseSentry(SamplesShared.Dsn) +#else .UseSentry() +#endif + // Add Sentry (configuration was done via appsettings.json but could be done programatically): .UseStartup(); } } diff --git a/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/appsettings.json b/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/appsettings.json index 3dc9e1058b..b28a5bad3d 100644 --- a/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/appsettings.json +++ b/samples/Sentry.Samples.Aws.Lambda.AspNetCoreServer/appsettings.json @@ -9,7 +9,7 @@ }, "Sentry": { "NOTE1": "Add your own DSN below see the sample event in YOUR Sentry dashboard.", - "Dsn": "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537", + //"Dsn": "TODO: Configure your DSN here and uncomment this line", "EnableTracing": true, "NOTE2": "Many Sentry ASP.NET Core options are demonstrated in the other samples in this repository.", diff --git a/samples/Sentry.Samples.Azure.Functions.Worker/Program.cs b/samples/Sentry.Samples.Azure.Functions.Worker/Program.cs index 5398d09a6e..efc8943223 100644 --- a/samples/Sentry.Samples.Azure.Functions.Worker/Program.cs +++ b/samples/Sentry.Samples.Azure.Functions.Worker/Program.cs @@ -6,7 +6,10 @@ { builder.UseSentry(host, options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + options.Dsn = SamplesShared.Dsn; +#endif options.TracesSampleRate = 1.0; options.Debug = true; }); diff --git a/samples/Sentry.Samples.Console.Basic/Program.cs b/samples/Sentry.Samples.Console.Basic/Program.cs index be18640323..39027fa0ee 100644 --- a/samples/Sentry.Samples.Console.Basic/Program.cs +++ b/samples/Sentry.Samples.Console.Basic/Program.cs @@ -14,9 +14,11 @@ // Initialize the Sentry SDK. (It is not necessary to dispose it.) SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif // When debug is enabled, the Sentry client will emit detailed debugging information to the console. // This might be helpful, or might interfere with the normal operation of your application. diff --git a/samples/Sentry.Samples.Console.Customized/Program.cs b/samples/Sentry.Samples.Console.Customized/Program.cs index dac1d9062a..0ccfad7b04 100644 --- a/samples/Sentry.Samples.Console.Customized/Program.cs +++ b/samples/Sentry.Samples.Console.Customized/Program.cs @@ -17,9 +17,11 @@ await SentrySdk.ConfigureScopeAsync(async scope => // Enable the SDK using (SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif // Send stack trace for events that were not created from an exception // e.g: CaptureMessage, log.LogDebug, log.LogInformation ... diff --git a/samples/Sentry.Samples.Console.HeapDump/Program.cs b/samples/Sentry.Samples.Console.HeapDump/Program.cs index ef5138c405..17983665fb 100644 --- a/samples/Sentry.Samples.Console.HeapDump/Program.cs +++ b/samples/Sentry.Samples.Console.HeapDump/Program.cs @@ -14,9 +14,11 @@ // Initialize the Sentry SDK. (It is not necessary to dispose it.) SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif // When debug is enabled, the Sentry client will emit detailed debugging information to the console. // This might be helpful, or might interfere with the normal operation of your application. diff --git a/samples/Sentry.Samples.Console.Native/Program.cs b/samples/Sentry.Samples.Console.Native/Program.cs index 416e2e3a75..3ffa459bcd 100644 --- a/samples/Sentry.Samples.Console.Native/Program.cs +++ b/samples/Sentry.Samples.Console.Native/Program.cs @@ -5,9 +5,11 @@ // Initialize the Sentry SDK. (It is not necessary to dispose it.) SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif // When debug is enabled, the Sentry client will emit detailed debugging information to the console. // This might be helpful, or might interfere with the normal operation of your application. diff --git a/samples/Sentry.Samples.Console.Profiling/Program.cs b/samples/Sentry.Samples.Console.Profiling/Program.cs index 7c0b1528f4..3c1de15f38 100644 --- a/samples/Sentry.Samples.Console.Profiling/Program.cs +++ b/samples/Sentry.Samples.Console.Profiling/Program.cs @@ -7,9 +7,11 @@ private static void Main() // Enable the SDK using (SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif options.Debug = true; // options.AutoSessionTracking = true; diff --git a/samples/Sentry.Samples.EntityFramework/Program.cs b/samples/Sentry.Samples.EntityFramework/Program.cs index 5a4bd44343..6a2b8a09cc 100644 --- a/samples/Sentry.Samples.EntityFramework/Program.cs +++ b/samples/Sentry.Samples.EntityFramework/Program.cs @@ -4,9 +4,11 @@ using var _ = SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif options.Debug = true; // To see SDK logs on the console options.TracesSampleRate = 1.0; diff --git a/samples/Sentry.Samples.GenericHost/Program.cs b/samples/Sentry.Samples.GenericHost/Program.cs index de97965a84..5bad8f3641 100644 --- a/samples/Sentry.Samples.GenericHost/Program.cs +++ b/samples/Sentry.Samples.GenericHost/Program.cs @@ -6,7 +6,15 @@ var builder = Host.CreateApplicationBuilder(); builder.Logging.AddConfiguration(builder.Configuration); + +#if !SENTRY_DSN_DEFINED_IN_ENV +// A DSN is required. You can set it here in code, via the SENTRY_DSN environment variable or in your +// appsettings.json file. +// See https://docs.sentry.io/platforms/dotnet/guides/aspnetcore/#configure +builder.Logging.AddSentry(SamplesShared.Dsn); +#else builder.Logging.AddSentry(); +#endif builder.Services.AddHostedService(); diff --git a/samples/Sentry.Samples.GenericHost/appsettings.json b/samples/Sentry.Samples.GenericHost/appsettings.json index 57bd768397..256a4dc806 100644 --- a/samples/Sentry.Samples.GenericHost/appsettings.json +++ b/samples/Sentry.Samples.GenericHost/appsettings.json @@ -5,7 +5,7 @@ } }, "Sentry": { - "Dsn": "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537", + //"Dsn": "TODO: Configure your DSN here and uncomment this line", "MinimumBreadcrumbLevel": "Debug", "MinimumEventLevel": "Warning", "SendDefaultPii": true // Send user name and machine name diff --git a/samples/Sentry.Samples.Google.Cloud.Functions/Function.cs b/samples/Sentry.Samples.Google.Cloud.Functions/Function.cs index c8abddd5c4..7c151d6ee8 100644 --- a/samples/Sentry.Samples.Google.Cloud.Functions/Function.cs +++ b/samples/Sentry.Samples.Google.Cloud.Functions/Function.cs @@ -3,6 +3,10 @@ using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Logging; +// ********************************************************************************************* +// NOTE: to run this sample you'll need to specify a Sentry DSN, either by configuring it in the +// appsettings.json file or by setting the SENTRY_DSN environment variable. +// ********************************************************************************************* [assembly: FunctionsStartup(typeof(SentryStartup))] public class Function : IHttpFunction diff --git a/samples/Sentry.Samples.Google.Cloud.Functions/appsettings.json b/samples/Sentry.Samples.Google.Cloud.Functions/appsettings.json index de1f1b3b6a..0f384e48c8 100644 --- a/samples/Sentry.Samples.Google.Cloud.Functions/appsettings.json +++ b/samples/Sentry.Samples.Google.Cloud.Functions/appsettings.json @@ -1,6 +1,6 @@ { "Sentry": { - "Dsn": "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537", + //"Dsn": "TODO: Configure your DSN here and uncomment this line", "MaxRequestBodySize": "Always", "SendDefaultPii": true, "EnableTracing": true diff --git a/samples/Sentry.Samples.GraphQL.Client.Http/Program.cs b/samples/Sentry.Samples.GraphQL.Client.Http/Program.cs index 659294bf97..36a085fcb2 100644 --- a/samples/Sentry.Samples.GraphQL.Client.Http/Program.cs +++ b/samples/Sentry.Samples.GraphQL.Client.Http/Program.cs @@ -11,9 +11,11 @@ SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. - // // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif options.CaptureFailedRequests = true; options.SendDefaultPii = true; diff --git a/samples/Sentry.Samples.GraphQL.Server/Program.cs b/samples/Sentry.Samples.GraphQL.Server/Program.cs index 2f63a90370..ab38e073b6 100644 --- a/samples/Sentry.Samples.GraphQL.Server/Program.cs +++ b/samples/Sentry.Samples.GraphQL.Server/Program.cs @@ -41,9 +41,11 @@ public static WebApplication BuildWebApplication(string[] args) builder.WebHost.UseSentry(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif options.TracesSampleRate = 1.0; options.Debug = true; diff --git a/samples/Sentry.Samples.Hangfire/Program.cs b/samples/Sentry.Samples.Hangfire/Program.cs index 8fae35e0ef..de5ebb2ca6 100644 --- a/samples/Sentry.Samples.Hangfire/Program.cs +++ b/samples/Sentry.Samples.Hangfire/Program.cs @@ -14,6 +14,10 @@ public static void Main(string[] args) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseMemoryStorage(new MemoryStorageOptions()) + // ********************************************************************************************* + // NOTE: to run this sample you'll need to specify a Sentry DSN, either by configuring it in the + // appsettings.json file or by setting the SENTRY_DSN environment variable. + // ********************************************************************************************* .UseSentry() // <- Add Sentry to automatically send check-ins ); diff --git a/samples/Sentry.Samples.Hangfire/appsettings.json b/samples/Sentry.Samples.Hangfire/appsettings.json index ebcd904504..d5e353d5b7 100644 --- a/samples/Sentry.Samples.Hangfire/appsettings.json +++ b/samples/Sentry.Samples.Hangfire/appsettings.json @@ -3,7 +3,7 @@ // All Sentry settings can also be configured via code or environment variables: "Sentry": { // The DSN can also be set via environment variable - "Dsn": "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537", + // "Dsn": "TODO: Configure your DSN here and uncomment this line", // Opt-in for payload submission "MaxRequestBodySize": "Always", // Sends Cookies, User Id when one is logged on and user IP address to sentry. It's turned off by default. diff --git a/samples/Sentry.Samples.Ios/AppDelegate.cs b/samples/Sentry.Samples.Ios/AppDelegate.cs index 70340fdd98..37e2a48509 100644 --- a/samples/Sentry.Samples.Ios/AppDelegate.cs +++ b/samples/Sentry.Samples.Ios/AppDelegate.cs @@ -16,7 +16,16 @@ public override bool FinishedLaunching(UIApplication application, NSDictionary l // Init the Sentry SDK SentrySdk.Init(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // You must specify a DSN. On mobile platforms, this should be done in code here. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#else + // To make things easier for the SDK maintainers our samples check for a SENTRY_DSN environment variable + // and write this (as a constant) into an EnvironmentVariables class. Generally, you won't want to do + // this in your own mobile projects though - you should set the DSN in code as above + options.Dsn = EnvironmentVariables.Dsn; +#endif options.Debug = true; options.SampleRate = 1.0F; options.TracesSampleRate = 1.0; diff --git a/samples/Sentry.Samples.Log4Net/app.config b/samples/Sentry.Samples.Log4Net/app.config index 70bc16f3c4..613a0bed0e 100644 --- a/samples/Sentry.Samples.Log4Net/app.config +++ b/samples/Sentry.Samples.Log4Net/app.config @@ -14,7 +14,7 @@ - + diff --git a/samples/Sentry.Samples.ME.Logging/Program.cs b/samples/Sentry.Samples.ME.Logging/Program.cs index e782f184bc..809db165b4 100644 --- a/samples/Sentry.Samples.ME.Logging/Program.cs +++ b/samples/Sentry.Samples.ME.Logging/Program.cs @@ -6,7 +6,11 @@ builder.AddConsole(); builder.AddSentry(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif // Set to true to SDK debugging to see the internal messages through the logging library. options.Debug = false; diff --git a/samples/Sentry.Samples.MacCatalyst/AppDelegate.cs b/samples/Sentry.Samples.MacCatalyst/AppDelegate.cs index cb34e563df..044ae0c169 100644 --- a/samples/Sentry.Samples.MacCatalyst/AppDelegate.cs +++ b/samples/Sentry.Samples.MacCatalyst/AppDelegate.cs @@ -1,3 +1,5 @@ +using System.Diagnostics; + namespace Sentry.Samples.MacCatalyst; [Register("AppDelegate")] @@ -14,7 +16,16 @@ public override bool FinishedLaunching(UIApplication application, NSDictionary l // Init the Sentry SDK SentrySdk.Init(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // You must specify a DSN. On mobile platforms, this should be done in code here. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#else + // To make things easier for the SDK maintainers our samples check for a SENTRY_DSN environment variable + // and write this (as a constant) into an EnvironmentVariables class. Generally, you won't want to do + // this in your own mobile projects though - you should set the DSN in code as above + options.Dsn = EnvironmentVariables.Dsn; +#endif options.Debug = true; }); diff --git a/samples/Sentry.Samples.MacOS/AppDelegate.cs b/samples/Sentry.Samples.MacOS/AppDelegate.cs index 0477dd9eeb..8aba349817 100644 --- a/samples/Sentry.Samples.MacOS/AppDelegate.cs +++ b/samples/Sentry.Samples.MacOS/AppDelegate.cs @@ -8,7 +8,11 @@ public override void DidFinishLaunching(NSNotification notification) // Init the Sentry SDK SentrySdk.Init(options => { - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif options.Debug = true; options.TracesSampleRate = 1.0; }); diff --git a/samples/Sentry.Samples.Maui/MauiProgram.cs b/samples/Sentry.Samples.Maui/MauiProgram.cs index 925cf0dc70..625632ecc2 100644 --- a/samples/Sentry.Samples.Maui/MauiProgram.cs +++ b/samples/Sentry.Samples.Maui/MauiProgram.cs @@ -13,9 +13,18 @@ public static MauiApp CreateMauiApp() // This adds Sentry to your Maui application .UseSentry(options => { - // The DSN is the only required option. - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; - +#if !SENTRY_DSN_DEFINED_IN_ENV + // You must specify a DSN. On mobile platforms, this should be done in code here. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#else + // To make things easier for the SDK maintainers we have a custom build target that writes the + // SENTRY_DSN environment variable into an EnvironmentVariables class that is available for mobile + // targets. This allows us to share one DSN defined in the ENV across desktop and mobile samples. + // Generally, you won't want to do this in your own mobile projects though - you should set the DSN + // in code as above + options.Dsn = EnvironmentVariables.Dsn; +#endif // By default, we will send the last 100 breadcrumbs with each event. // If you want to see everything we can capture from MAUI, you may wish to use a larger value. options.MaxBreadcrumbs = 1000; diff --git a/samples/Sentry.Samples.NLog/NLog.config b/samples/Sentry.Samples.NLog/NLog.config index 736a16aba4..5022aa23bb 100644 --- a/samples/Sentry.Samples.NLog/NLog.config +++ b/samples/Sentry.Samples.NLog/NLog.config @@ -10,11 +10,10 @@ - { - // If DSN is not set, the SDK will look for an environment variable called SENTRY_DSN. If - // nothing is found, SDK is disabled. - options.Dsn = DsnSample; - +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, in the SENTRY_DSN environment variable or in the + // NLog.config file. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif options.Layout = "${message}"; options.BreadcrumbLayout = "${logger}: ${message}"; // Optionally specify a separate format for breadcrumbs diff --git a/samples/Sentry.Samples.OpenTelemetry.AspNetCore/Program.cs b/samples/Sentry.Samples.OpenTelemetry.AspNetCore/Program.cs index 3cb706852c..e53d2b20b2 100644 --- a/samples/Sentry.Samples.OpenTelemetry.AspNetCore/Program.cs +++ b/samples/Sentry.Samples.OpenTelemetry.AspNetCore/Program.cs @@ -26,9 +26,11 @@ builder.WebHost.UseSentry(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable, or the config. - // // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. + // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ + options.Dsn = SamplesShared.Dsn; +#endif options.Debug = builder.Environment.IsDevelopment(); options.SendDefaultPii = true; diff --git a/samples/Sentry.Samples.OpenTelemetry.Console/Program.cs b/samples/Sentry.Samples.OpenTelemetry.Console/Program.cs index 7ed49ee2bd..0ce193ad13 100644 --- a/samples/Sentry.Samples.OpenTelemetry.Console/Program.cs +++ b/samples/Sentry.Samples.OpenTelemetry.Console/Program.cs @@ -14,9 +14,11 @@ SentrySdk.Init(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif options.Debug = true; options.TracesSampleRate = 1.0; diff --git a/samples/Sentry.Samples.Serilog/Program.cs b/samples/Sentry.Samples.Serilog/Program.cs index 83818af586..59ed09548d 100644 --- a/samples/Sentry.Samples.Serilog/Program.cs +++ b/samples/Sentry.Samples.Serilog/Program.cs @@ -14,9 +14,11 @@ private static void Main() // Other overloads exist, for example, configure the SDK with only the DSN or no parameters at all. .WriteTo.Sentry(options => { - // You can set here in code, or you can set it in the SENTRY_DSN environment variable. +#if !SENTRY_DSN_DEFINED_IN_ENV + // A DSN is required. You can set here in code, or you can set it in the SENTRY_DSN environment variable. // See https://docs.sentry.io/product/sentry-basics/dsn-explainer/ - options.Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537"; + options.Dsn = SamplesShared.Dsn; +#endif // Debug and higher are stored as breadcrumbs (default os Information) options.MinimumBreadcrumbLevel = LogEventLevel.Debug; diff --git a/src/Sentry/Internal/SettingLocator.cs b/src/Sentry/Internal/SettingLocator.cs index 2dc494e53c..4555ac7333 100644 --- a/src/Sentry/Internal/SettingLocator.cs +++ b/src/Sentry/Internal/SettingLocator.cs @@ -1,3 +1,4 @@ +using Sentry.Extensibility; using Sentry.Internal.Extensions; namespace Sentry.Internal; @@ -36,11 +37,23 @@ public string GetDsn() if (!string.IsNullOrEmpty(_options.Dsn)) { + _options.LogDebug("DSN read from options: {0}", _options.Dsn); return _options.Dsn; } - var dsn = GetEnvironmentVariable(Constants.DsnEnvironmentVariable) - ?? AssemblyForAttributes?.GetCustomAttribute()?.Dsn; + var dsn = GetEnvironmentVariable(Constants.DsnEnvironmentVariable); + if (dsn is not null) + { + _options.LogDebug("DSN read from environment variable: {0}", dsn); + } + + dsn ??= AssemblyForAttributes?.GetCustomAttribute()?.Dsn; + if (dsn is not null) + { + _options.LogDebug("DSN read from assembly attribute: {0}", dsn); + } + + _options.LogDebug("AssemblyForAttributes is {0}", AssemblyForAttributes?.FullName); // If there has been no DSN provided (`null`) and none has been found in the environment we consider this a // failed configuration and throw diff --git a/test/Sentry.AspNetCore.Tests/AspNetCoreSentryWebHostBuilder.IntegrationTests.cs b/test/Sentry.AspNetCore.Tests/AspNetCoreSentryWebHostBuilder.IntegrationTests.cs index 06fe8cf76b..455bf8c0a2 100644 --- a/test/Sentry.AspNetCore.Tests/AspNetCoreSentryWebHostBuilder.IntegrationTests.cs +++ b/test/Sentry.AspNetCore.Tests/AspNetCoreSentryWebHostBuilder.IntegrationTests.cs @@ -26,15 +26,21 @@ public void UseSentry_ValidDsnString_EnablesSdk() } } - [Fact] + [SkippableFact] public void UseSentry_NoDsnProvided_ThrowsException() { +#if SENTRY_DSN_DEFINED_IN_ENV + Skip.If(true, "This test only works when the DSN is not configured as an environment variable."); +#endif Assert.Throws(() => _webHostBuilder.UseSentry().Build()); } - [Fact] + [SkippableFact] public void UseSentry_DisableDsnString_DisabledSdk() { +#if SENTRY_DSN_DEFINED_IN_ENV + Skip.If(true, "This test only works when the DSN is not configured as an environment variable."); +#endif _ = _webHostBuilder.UseSentry(Sentry.SentryConstants.DisableSdkDsnValue) .Build(); diff --git a/test/Sentry.NLog.Tests/SentryTargetTests.cs b/test/Sentry.NLog.Tests/SentryTargetTests.cs index 6b87025326..f0ef530a68 100644 --- a/test/Sentry.NLog.Tests/SentryTargetTests.cs +++ b/test/Sentry.NLog.Tests/SentryTargetTests.cs @@ -476,9 +476,12 @@ void Continuation(Exception _) await hub.Received().FlushAsync(Arg.Any()); } - [Fact] + [SkippableFact] public void InitializeTarget_InitializesSdk() { +#if SENTRY_DSN_DEFINED_IN_ENV + Skip.If(true, "This test only works when the DSN is not configured as an environment variable."); +#endif _fixture.Options.Dsn = Sentry.SentryConstants.DisableSdkDsnValue; _fixture.SdkDisposeHandle = null; _fixture.Options.InitializeSdk = true; diff --git a/test/Sentry.Tests/Internals/SettingLocatorTests.cs b/test/Sentry.Tests/Internals/SettingLocatorTests.cs index 7fb1270fc4..9491a410a9 100644 --- a/test/Sentry.Tests/Internals/SettingLocatorTests.cs +++ b/test/Sentry.Tests/Internals/SettingLocatorTests.cs @@ -82,9 +82,12 @@ public void CanUseOtherAssembly() Assert.Same(expected, actual); } - [Fact] + [SkippableFact] public void GetDsn_WithEmptyString_DoesNotThrow() { +#if SENTRY_DSN_DEFINED_IN_ENV + Skip.If(true, "This test only works when the DSN is not configured as an environment variable."); +#endif var options = new SentryOptions { Dsn = DisableSdkDsnValue }; var dsn = options.SettingLocator.GetDsn(); @@ -163,9 +166,12 @@ public void GetDsn_DsnIsNonEmptyString_IgnoresAttribute() Assert.Equal(validDsn1, options.Dsn); } - [Fact] + [SkippableFact] public void GetDsn_WithNoValueAnywhere_ThrowsException() { +#if SENTRY_DSN_DEFINED_IN_ENV + Skip.If(true, "This test only works when the DSN is not configured as an environment variable."); +#endif var options = new SentryOptions(); Assert.Throws(() => options.SettingLocator.GetDsn()); diff --git a/test/Sentry.Tests/SentryGraphQlHttpFailedRequestHandlerTests.cs b/test/Sentry.Tests/SentryGraphQlHttpFailedRequestHandlerTests.cs index 65af1ae103..0b361d2e29 100644 --- a/test/Sentry.Tests/SentryGraphQlHttpFailedRequestHandlerTests.cs +++ b/test/Sentry.Tests/SentryGraphQlHttpFailedRequestHandlerTests.cs @@ -44,7 +44,7 @@ public void HandleResponse_RequestsToSentryDsn_DontCapture() var options = new SentryOptions { CaptureFailedRequests = true, - Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537" + Dsn = ValidDsn }; var sut = new SentryGraphQLHttpFailedRequestHandler(hub, options); diff --git a/test/Sentry.Tests/SentryHttpFailedRequestHandlerTests.cs b/test/Sentry.Tests/SentryHttpFailedRequestHandlerTests.cs index 4e81fac3c6..17a5e600f1 100644 --- a/test/Sentry.Tests/SentryHttpFailedRequestHandlerTests.cs +++ b/test/Sentry.Tests/SentryHttpFailedRequestHandlerTests.cs @@ -65,7 +65,7 @@ public void HandleResponse_RequestsToSentryDsn_DontCapture() var options = new SentryOptions { CaptureFailedRequests = true, - Dsn = "https://eb18e953812b41c3aeb042e666fd3b5c@o447951.ingest.sentry.io/5428537" + Dsn = ValidDsn }; var sut = GetSut(options); diff --git a/test/Sentry.Tests/SentrySdkTests.cs b/test/Sentry.Tests/SentrySdkTests.cs index ca2723df61..49ca287d59 100644 --- a/test/Sentry.Tests/SentrySdkTests.cs +++ b/test/Sentry.Tests/SentrySdkTests.cs @@ -132,9 +132,12 @@ public void Init_EmptyDsn_DisabledSdk() } } - [Fact] + [SkippableFact] public void Init_EmptyDsn_LogsWarning() { +#if SENTRY_DSN_DEFINED_IN_ENV + Skip.If(true, "This test only works when the DSN is not configured as an environment variable."); +#endif var options = new SentryOptions { Dsn = SentryConstants.DisableSdkDsnValue,