c# - NET Core 3.1 worker 中带有 Serilog 的哨兵
问题描述
我有一个这样配置的 NET Core 3.1 worker:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var configuration = new ConfigurationBuilder()
.SetBasePath(GetBasePath())
.AddJsonFile("appsettings.json", false)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true, reloadOnChange: true)
.Build();
services.AddSingleton<ILogger>(s =>
{
return new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
});
这是 appsettings 文件:
"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.Sentry" ],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"System": "Warning",
"Sentry": "Warning"
}
},
"Enrich": [ "FromLogContext", "WithExceptionDetails" ],
"WriteTo": [
{
"Name": "Console"
},
{
"Name": "Sentry",
"Args": {
"Dsn": "https://<<my-key>>",
"MinimumBreadcrumbLevel": "Information",
"MinimumEventLevel": "Information",
"AttachStackTrace": true,
"Debug": true,
"Environment": "Develop",
"DiagnosticsLevel": "Information"
}
}
]
}
如果我尝试:
_logger.Information("Test INFO");
throw new Exception("foo");
Console
日志工作正常,但它不会登录到Sentry
.
我想念什么?
更新
我Sentry.Serilog
没有运气添加。
我发现了很多在 WebHost 上下文中添加哨兵的示例,如下所示:
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder
.UseKestrel()
.UseConfiguration(Configuration)
.UseSerilog()
.UseSentry(o =>
但我不知道如何在我的工作人员服务上下文中执行此操作,这是问题所在吗?
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
???
这是我的Program.cs
:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Serilog;
using System;
using System.IO;
using System.Text;
using System.Threading;
namespace PdfQueueWorker
{
class Program
{
private static readonly string _environment
= Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production";
public static IConfiguration Configuration { get; private set; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false)
.AddJsonFile($"appsettings.{_environment}.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
static void Main(string[] args)
{
if (_environment != "Stable")
{
Serilog.Debugging.SelfLog.Enable(Console.Error);
}
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
try
{
Log.Information("Starting.");
CreateHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
}
finally
{
Log.CloseAndFlush();
}
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<ILogger>(s =>
{
return new LoggerConfiguration()
.ReadFrom.Configuration(Configuration)
.CreateLogger();
});
services.AddSingleton(Configuration);
services.AddHostedService<Worker>();
});
}
}
解决方案
推荐阅读
- javascript - 仅更新单个状态变量时所有组件重新渲染
- bash - Bash脚本双引号转义
- php - 该脚本不检查凭据是否正确并且不重定向到个人资料页面
- java - 在Spring mvc上的cofiger swagger之后无法在jboss上部署war文件
- c# - jquery版本不低于4.00如何解决
- python - 如何使用python中的图像名称将图像分成两个文件夹?
- php - 关于 MySql 和 php 数组
- java - Problem while trying to send an object encrypted with AES
- vue.js - 在 router.js 中访问 Vuex 存储时出现异步等待问题
- javascript - JQuery 不能使用多个元素的相同名称