Бекенд на C# Web Api

To Kaiten

Логирование

Serilog

Для логирования будем использовать библиотеку Serilog. Это удобная и простая в настройке библиотека. С помощью Serilog можно записывать логи в файл, в базу данных и в другие источники.

Добавление пакетов

В проект нужно добавить следующие NuGet пакеты:

Serilog

Serilog.Sinks.File

Serilog.Extensions.Logging

Настройка в Program

Для настройки Serilog добавьте следующий метод в ServiceExtentions:

// файл Program.cs

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddSerilog(builder.Logging, builder.Environment);
// файл ServiceExtentions.cs

public static class ServiceExtensions
{
    public static void AddSerilog(this IServiceCollection services, ILoggingBuilder loggingBuilder, IWebHostEnvironment environment)
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.File("logs/log-.txt", rollingInterval: RollingInterval.Day)
            .MinimumLevel.Is(environment.IsProduction() ? Serilog.Events.LogEventLevel.Information : Serilog.Events.LogEventLevel.Debug)
            .CreateLogger();

        loggingBuilder.ClearProviders();

        if (environment.IsProduction() == false)
        {
            loggingBuilder.AddSerilog();
            services.AddHttpLogging(o =>
            {
                o.LoggingFields = Microsoft.AspNetCore.HttpLogging.HttpLoggingFields.All;
            });
        }
    }
}

В данном примере логи будут записываться в файл по пути logs/log-<дата>.txt, где <дата> - дата текущего дня. Каждый день будет создаваться новый файл с логами (настройка RollingInterval.Day).

Также обратите внимание, что если мы находимся не в продакшн среде, то вызывается метод AddHttpLogging с параметром LoggingFields = All. Этот метод автоматически логирует все запросы ко всем эндпоинтам, при этом логирует всю возможную информацию (из-за настройки All). Это может быть удобно при отладке или тестировании, однако при средней и тем более большой нагрузке необходимо выключать такое логирование, т.к. файлы с такими детальными логами быстро увеличиваются в размере и снижают эффективность работы приложения.

Как писать свои логи

После настройки Serilog можно в любом месте вызвать следующий код:

Log.Information($"Send confirmation code to {email});

Этот лог попадет в файл logs/log<дата>.txt независимо от того в какой среде выполняется приложение (dev или prod).


Ссылки

Code Project — Integrate Serilog (Logging Framework) with ASP.NET Core


Автор документа: Артём Ветик