Всякий раз, когда в нашем API возникает ошибка, мы получаем несколько писем за одну ошибку. На основании журнала сообщений; мы можем видеть, что эти другие электронные письма, кажется, генерируются, потому что различные библиотеки Microsoft вызывают что-то вроде _logger.LogError
, а также нашу собственную _ logger.LogError
, что происходит, когда мы обрабатываем ошибку.
Например, при наличии тайм-аута базы данных мы видим 4 электронных письма из этих разных классов:
- Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware
- Microsoft.EntityFrameworkCore .Database.Command
- Microsoft.EntityFrameworkCore.Query
- Web.Controllers.ErrorController (наш собственный обработчик исключений; это единственный, который мы хотим видеть)
Последний является единственным, в котором есть собственное форматирование ошибок с полезной информацией, такой как текущий пользователь и т. Д. c. Другие просто содержат трассировку стека, которая уже находится в нашей собственной отформатированной электронной почте.
Мы не можем точно определить, откуда поступают эти другие сообщения журнала; но наиболее вероятная вещь, о которой я могу подумать, это то, что в библиотеках Microsoft они вызывают _logger.LogError()
, а наша собственная конфигурация NLog обрабатывает все экземпляры LogError
; вместо того, чтобы просто обрабатывать наши собственные.
Как мы можем предотвратить запись этих других операторов журнала и, в частности, по электронной почте нам?
Это наша установка в Program.cs:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog();