Перейти к содержанию

Эффективное использование журналирования в промышленном приложении

Причины, по которым используется журналирование, можно разделить на три категории:

  • журналирование с целью аудита или аналитики;
  • журналирование ошибок;
  • журналирование событий, не связанных с ошибками, чтобы обеспечить запись цепочки событий к моменту, когда ошибка действительно происходит.

Совет

Если не просматривать журналы регулярно, вполне можно пропустить момент появления проблемы. Для крупных и средних приложений это становится непрактичным, поэтому оправдано применение специальных инструментов, таких как 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>());
}


  1. см. также шаблон “отслеживание исключений” в “шаблонах микросервисной архитектуры” 


Последнее обновление : 7 мая 2023 г.
Дата создания : 20 октября 2022 г.

Комментарии

Комментарии