使用 .Net Core 3 控制台应用程序中的 Serilog appsettings.json 中的哨兵配置
Sentry configuration in appsettings.json with Serilog in .Net Core 3 Console App
我正在使用以下代码在我的 .Net Core 控制台应用程序中使用 Serilog
配置 Sentry
:
return new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Sentry(o =>
{
o.MinimumBreadcrumbLevel = LogEventLevel.Error;
o.MinimumEventLevel = LogEventLevel.Error;
o.Dsn = new Dsn(configuration.GetValue<string>("Sentry:Dsn"));
o.Debug = false;
o.AttachStacktrace = true;
o.SendDefaultPii = true;
})
.CreateLogger();
现在我想将所有这些配置移动到 appsettings.json
文件中,因为我需要在开发环境和生产环境中进行不同的配置:
示例:
"Sentry": {
"Dsn": "<dsn>",
"IncludeRequestPayload": true,
"IncludeActivityData": true,
"Debug": false,
"DiagnosticsLevel": "Debug",
"MinimumBreadcrumbLevel": "Debug",
"MinimumEventLevel": "Warning"
},
是否可以从那里读取整个配置?
更新
我在控制台应用程序中尝试以下配置:
static void Main(string[] args)
{
using (SentrySdk.Init("<dsn>"))
{
// my code
}
...
serviceCollection.AddSingleton<ILogger>(s =>
{
return new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
});
应用程序设置:
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Sentry" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Sentry": "Information"
}
},
"Enrich": [ "FromLogContext" ],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "Sentry",
"Args": {
"Dsn": "<dsn>",
"MinimumBreadcrumbLevel": "Info",
"MinimumEventLevel": "Info",
"AttachStackTrace": true,
"Debug": true,
"DiagnosticsLevel": "Info"
}
}
]
但是SentrySdk.Init("<dsn>")
需要一个 DSN,它不会从应用程序设置中读取它!
是这样吗?
Serilog 不知道 ASP.NET 核心配置。至少以一种将配置对象的特定部分绑定到其扩展的方式。
如果您正在使用 ASP.NET Core,我假设您也在使用 Sentry.AspNetCore
。建议你这样做。在这种情况下,您也需要将配置传递给它。
NuGetTrends 是一个开源项目,使用 Serilog 和 ASP.NET 核心,同时使用 appsettings.json
文件进行配置。
Here's the Program.cs setting up Sentry, Serilog and ASP.NET Core.
请注意,您提到的配置(以 Sentry
作为键)将由 Sentry.AspNetCore
获取,但不会由 Sentry.Serilog
获取(与 [=34= 分离) ]核心)。
您可以配置后者,这是一个普通的 Serilog 接收器,例如:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Sentry": "Information"
}
},
"WriteTo": [
{
"Name": "Sentry",
"Args": {
"MinimumBreadcrumbLevel": "Debug",
"MinimumEventLevel": "Warning"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName" ]
}
我建议在 Sentry
键上保留 DSN
和其他设置,这会使 ASP.NET Core 初始化 SDK,它还将利用 Serilog 集成.
我正在使用以下代码在我的 .Net Core 控制台应用程序中使用 Serilog
配置 Sentry
:
return new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Sentry(o =>
{
o.MinimumBreadcrumbLevel = LogEventLevel.Error;
o.MinimumEventLevel = LogEventLevel.Error;
o.Dsn = new Dsn(configuration.GetValue<string>("Sentry:Dsn"));
o.Debug = false;
o.AttachStacktrace = true;
o.SendDefaultPii = true;
})
.CreateLogger();
现在我想将所有这些配置移动到 appsettings.json
文件中,因为我需要在开发环境和生产环境中进行不同的配置:
示例:
"Sentry": {
"Dsn": "<dsn>",
"IncludeRequestPayload": true,
"IncludeActivityData": true,
"Debug": false,
"DiagnosticsLevel": "Debug",
"MinimumBreadcrumbLevel": "Debug",
"MinimumEventLevel": "Warning"
},
是否可以从那里读取整个配置?
更新
我在控制台应用程序中尝试以下配置:
static void Main(string[] args)
{
using (SentrySdk.Init("<dsn>"))
{
// my code
}
...
serviceCollection.AddSingleton<ILogger>(s =>
{
return new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
});
应用程序设置:
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Sentry" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Sentry": "Information"
}
},
"Enrich": [ "FromLogContext" ],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "Sentry",
"Args": {
"Dsn": "<dsn>",
"MinimumBreadcrumbLevel": "Info",
"MinimumEventLevel": "Info",
"AttachStackTrace": true,
"Debug": true,
"DiagnosticsLevel": "Info"
}
}
]
但是SentrySdk.Init("<dsn>")
需要一个 DSN,它不会从应用程序设置中读取它!
是这样吗?
Serilog 不知道 ASP.NET 核心配置。至少以一种将配置对象的特定部分绑定到其扩展的方式。
如果您正在使用 ASP.NET Core,我假设您也在使用 Sentry.AspNetCore
。建议你这样做。在这种情况下,您也需要将配置传递给它。
NuGetTrends 是一个开源项目,使用 Serilog 和 ASP.NET 核心,同时使用 appsettings.json
文件进行配置。
Here's the Program.cs setting up Sentry, Serilog and ASP.NET Core.
请注意,您提到的配置(以 Sentry
作为键)将由 Sentry.AspNetCore
获取,但不会由 Sentry.Serilog
获取(与 [=34= 分离) ]核心)。
您可以配置后者,这是一个普通的 Serilog 接收器,例如:
"Serilog": {
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Sentry": "Information"
}
},
"WriteTo": [
{
"Name": "Sentry",
"Args": {
"MinimumBreadcrumbLevel": "Debug",
"MinimumEventLevel": "Warning"
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName" ]
}
我建议在 Sentry
键上保留 DSN
和其他设置,这会使 ASP.NET Core 初始化 SDK,它还将利用 Serilog 集成.