Я пытаюсь регистрировать ошибки, возникающие при запуске приложения, для часового. Я использую ASP.NET Core 2.1.2, с Serilog и Sentry. Если я использую только часового, похоже, все в порядке.
WebHost.CreateDefaultBuilder(args)
.UseSentry("dsn")
.UseStartup<Startup>()
.Build()
.Run();
Однако, если я добавлю Serilog, приложение не отправляет никаких событий во время запуска, хотя оно продолжает работать, если из действия контроллера выдается исключение.
WebHost.CreateDefaultBuilder(args)
.UseSerilog(
(hostingContext, loggerConfiguration) =>
loggerConfiguration
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.Sentry(s => {
s.MinimumBreadcrumbLevel = LogEventLevel.Debug;
s.MinimumEventLevel = LogEventLevel.Error;
}))
.UseSentry("dsn")
.UseStartup<Startup>()
.Build()
.Run();
Я пытаюсь войти в оба метода ConfigureServices
и Configure
в классе запуска:
public class Startup
{
public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
Configuration = configuration;
Logger = logger;
}
public IConfiguration Configuration { get; }
public ILogger<Startup> Logger { get; }
public void ConfigureServices(IServiceCollection services)
{
Logger.LogError(new Exception("something went wrong while configuring services"), "ERROR");
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
Logger.LogError(new Exception("something went wrong while configuring app"), "ERROR");
}
}
Полагаю, это как-то связано с порядком инициализации каждого регистратора, но я не предпринимаю процесс запуска достаточно, чтобы найти решение или хотя бы объяснение. Есть идеи, почему это происходит и как я могу это исправить?
Обновление
Похоже, что добавление DNS в конфигурацию serilog явно объясняет проблему, хотя, похоже, это не соответствует образцам в часовом репо.
.UseSerilog(
(hostingContext, loggerConfiguration) =>
loggerConfiguration
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.Sentry(s => {
s.MinimumBreadcrumbLevel = LogEventLevel.Debug;
s.MinimumEventLevel = LogEventLevel.Error;
s.Dsn = new Dsn(dsn);
}))