Эффективное использование журналирования в промышленном приложении¶
Причины, по которым используется журналирование, можно разделить на три категории:
- журналирование с целью аудита или аналитики;
- журналирование ошибок;
- журналирование событий, не связанных с ошибками, чтобы обеспечить запись цепочки событий к моменту, когда ошибка действительно происходит.
Совет
Если не просматривать журналы регулярно, вполне можно пропустить момент появления проблемы. Для крупных и средних приложений это становится непрактичным, поэтому оправдано применение специальных инструментов, таких как Sentry или Raygun1
Выявление проблем с помощью специальных сообщений журнала¶
ASP.NET Core использует журналирование во всех своих библиотеках, таким образом, при корректной настройке журналов мы получаем доступ к деталям запроса и запроса EF Core даже без отправки дополнительных сообщений журнала собственным кодом. К примеру, для каждого запроса логируется то, какой URL-адрес был запрошен, какая страница Razor и какой обработчик страницы были вызваны, запрос к БД из EF Core, результат действия и ответ.
Однако, если добавить собственные сообщения журнала, проблема может быть локализована гораздо быстрее, чем без них.
Абстракции журналирования ASP.NET Core¶
ILogger— интерфейс для взаимодействия с ним в коде. МетодLog()для записи сообщения в журнал находится именно в нем;ILoggerProvider— используется для создания специального экземпляраILogger.ConsoleLoggerProviderсоздаст логгер для записи в консоль,FileLoggerProvider- для записи в файл;ILoggerFactory— связующее звено междуILoggerиILoggerProvider. ЭкземплярыILoggerProviderрегистрируются вILoggerFactory, у которого вызывается методCreateLogger()для создания экземпляраILogger, являющегося обёрткой над каждым из специальных логгеров. Благодаря этому при вызове методаLog()запись произойдёт в каждом из поставщиков.
Пример, как добавить логгирование в консоль:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
new HostBuilder()
.ConfigureLogging(builder => builder.AddConsole())
.ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup<Startup>());
}
-
см. также шаблон “отслеживание исключений” в “шаблонах микросервисной архитектуры” ↩
Дата создания : 20 октября 2022 г.