Я использую Serilog для регистрации информации о приложении asp.net core 2.1
, размещенном в IIS. Когда происходят исключения, мне сообщают по электронной почте. Дело в том, что некоторые исключения случаются, не причиняя вреда приложению вообще, и я не хочу, чтобы меня замечали каждый раз, когда это происходит.
Есть ли способ в Serilog исключить определенный тип исключения из журнала?
РЕДАКТИРОВАТЬ:
Вот как я настроил Serilog в моем Program.cs:
using System;
using System.Data;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;
using Serilog.Sinks.MSSqlServer;
namespace WindZone_Warehouse_Mobile_App
{
public class Program
{
public static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile(Environment.CurrentDirectory + "/appsettings.json")
.Build();
var columnOptions = new ColumnOptions {
AdditionalDataColumns = new System.Collections.ObjectModel.Collection<DataColumn>
{
new DataColumn {DataType = typeof (string), ColumnName = "email", DefaultValue = "myemail@myemail.com", MaxLength = 4000},
new DataColumn {DataType = typeof (string), ColumnName = "subject", DefaultValue = "Application error", MaxLength = 4000},
}
};
columnOptions.Store.Remove(StandardColumn.Level);
columnOptions.Store.Remove(StandardColumn.LogEvent);
columnOptions.Store.Remove(StandardColumn.Message);
columnOptions.Store.Remove(StandardColumn.MessageTemplate);
columnOptions.Store.Remove(StandardColumn.Properties);
columnOptions.Store.Remove(StandardColumn.TimeStamp);
columnOptions.Exception.ColumnName = "message";
columnOptions.Id.ColumnName = "id";
columnOptions.DisableTriggers = true;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", Serilog.Events.LogEventLevel.Information)
.Enrich.FromLogContext()
.Filter.ByExcluding(ObjectDisposedException) //What is the right way to tell Serilog to ignore this type of exception?
.WriteTo.RollingFile("logs\\log-{Hour}.txt", retainedFileCountLimit: 168)
.WriteTo.MSSqlServer(
connectionString: configuration.GetConnectionString("DefaultConnection"),
tableName: "emailtosend",
columnOptions: columnOptions,
restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error
)
.CreateLogger();
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog();
}
}
РЕДАКТИРОВАТЬ 2:
@ reza baiat, @GoldenAge & @Alessandro Di Cicco: Конечно, ваши ответы позволят мне обработать исключения, но только те, которые возникают за пределами регистратора Serilog. Serilog - это библиотека журналов, которая заменяет библиотеку Microsoft по умолчанию и позволяет мне пропустить все Try / Catch внутри остальной части моего кода, поскольку она будет регистрировать их все в (в моем случае) файле журнала и таблице SQL. Я пытаюсь заставить Serilog не регистрировать, например, ObjectDisposedException
исключений, которые происходят внутри критического кода. Я думаю, что Try / Catch в моем коде сбивал с толку, поэтому я исключу его из моего примера, так как он не имеет отношения к делу. Serilog будет перехватывать любое исключение, которое выдается после сборки и запуска приложения. Я думал, что это может быть дополнительная строка конфигурации Serilog, как это:
.Filter.ByExcluding(ObjectDisposedException)
или что-то в этом роде. Возможно ли это?
Спасибо