Expero.Libraries.CSharp.Logging 1.1.0

Expero.Libraries.CSharp.Logging

Пакет для работы с логированием частей HTTP запроса.

Пакет содержит:

  • Middleware для логирования HTTP запросов;
  • Аттрибут, для настройки разных уровней логирования для разных частей запроса конкретного endpoint;
  • Возможность сохранения логов в S3;
  • Аттрибут, для включения/отключения сохранения логов в S3 для конкретного endpoint;
  • Методы, для упрощенной регистрации Middleware и сервисов для логирования;
  • Возможность записи в лог собственных сообщений Executing endpoint и Executied endpoint с уровнем логирования Debug;

Подключение к проекту.

Для подключения пакета к проекту необходимо добавить сервис и зарегестрировать Middleware. Для регистрации сервисов в пакете есть 2 метода:

AddLogging(LoggingSettings).

AddLogging(Action<LoggingSettings>).

Модель LoggingSettings содержит настройки уровней логирования для разных частей запроса, и флаг RoutingDebug. Уровень логирования это стандартный enum LogLevel из Microsoft.Extensions.Logging:

  • RequestUrl - уровень логирования Url;
  • RequestQuery - уровень логирования Query-параметров;
  • RequestHeaders - уровень логирования заголовков запроса;
  • RequestBody - уровень логирования тела запроса;
  • ResponseHeaders - уровень логирования заголовков ответа;
  • ResponseBody - уровень логирования тела ответа;
  • RoutingDebug - флаг, включающий запись собственных сообщений Executing endpoint и Executied endpoint с уровнем Debug;
  • SaveToS3 - флаг, указывающий сохранение в S3 всех логов;
  • S3Credentials настройки сервера S3;
  • Bucket - наименование Bucket для хранения логов.

Кроме того, необходимо добавить Middleware к приложению. Для этого надо вызвать метод UseLogging() у ApplicationBuilder, причем обязательно после UseRouting().

После этого, все HTTP запросы к endpoint, отмеченным аттрибутом [Logging] будут логироваться с заданным уровнем.

N.B. При использовании RoutingDebug рекомендуется установить уровень логирования Microsoft.AspNetCore.Routing в уровень выше Information, например Warning. Это отключит штатные сообщения Executing endpoint и Executied endpoint с уровнем Information, иначе они будут дублироваться.

"Serilog": {
    "Other": {
        "Microsoft.AspNetCore.Routing": "Warning"
    }

Кроме того, необходимо добавить Middleware к приложению. Для этого надо вызвать метод UseLogging() у ApplicationBuilder, причем обязательно после UseRouting().

После этого, все HTTP запросы к endpoint, отмеченным аттрибутом [Logging] будут логироваться с заданным уровнем.

Пример добавления в проект:

public void AddService(IServiceCollection services)
{
    /*...*/
    services.AddLogging(options =>
    {
        options.RequestUrl = LogLevel.None;
        options.RequestQuery = LogLevel.Debug;
        options.RequestHeaders = LogLevel.Debug;
        options.RequestBody = LogLevel.Debug;
        options.ResponseHeaders = LogLevel.Debug;
        options.ResponseBody = LogLevel.Debug;
        options.RoutingDebug = true;
        options.SaveToS3 = false;
        options.S3Credentials = new ObjectStorageS3ServiceCredentials
        {
            Host = "s3.expero.ru",
            Ssl = true,
            AccessKey = "sdgfertfdsafsa",
            SecretKey = "dfkxkclkwoeewrjzklfskdknvcsdhfkja",
            DefaultBucket = new ObjectStorageS3BucketName("Logs")
         };
         options.Bucket = "portal-logs";
    });
    /*...*/
}

public static void UseApi(this IApplicationBuilder app)
{
    /*...*/
    app.UseRouting();

    app.UseLogging();
    /*...*/
}

либо через создание экземпляра LoggingSettings:

public void AddService(IServiceCollection services)
{
    /*...*/

    var settings = new LoggingSettings()
    {
        RequestUrl = LogLevel.None,
        RequestQuery = LogLevel.Debug,
        RequestHeaders = LogLevel.Debug,
        RequestBody = LogLevel.Debug,
        ResponseHeaders = LogLevel.Debug,
        ResponseBody = LogLevel.Debug,
        RoutingDebug = true,
        SaveToS3 = false,
        S3Credentials = new ObjectStorageS3ServiceCredentials
        {
            Host = "s3.expero.ru",
            Ssl = true,
            AccessKey = "sdgfertfdsafsa",
            SecretKey = "dfkxkclkwoeewrjzklfskdknvcsdhfkja",
            DefaultBucket = new ObjectStorageS3BucketName("Logs")
         },
         Bucket = "portal-logs"
    };

    services.AddLogging(settings);
    
    /*...*/
}

public static void UseApi(this IApplicationBuilder app)
{
    /*...*/

    app.UseRouting();

    app.UseLogging();

    /*...*/
}

Аттрибут [Logging].

Аттрибут [Logging] применяется к методам контроллера, обабатывающюм запросы. В случае указания аттрибута без параметров, будут логироваться те части запроса и с тем уровнем логирования, которые были указаны в параметрах AddLogging при подключении сервиса.

Пример использования аттибута [Logging]:

/*...*/
[HttpGet]
[Logging]
public JsonResult Get()
{
    return new JsonResult("Everything is ok");
}
/*...*/

В случае, когда необходимо явно указать какие части запроса каким уровнем необходимо логировать, нужно указать их в качестве параметров аттрибута [Logging(...)]. При этом части запроса, которые ны были явно указаны, будут логироваться с уровнем, указанным при подключении пакета. Доступные настройки имеют те же названия, что и в настройках при подключении:

  • RequestUrl - уровень логирования Url;
  • RequestQuery - уровень логирования Query-параметров;
  • RequestHeaders - уровень логирования заголовков запроса;
  • RequestBody - уровень логирования тела запроса;
  • ResponseHeaders - уровень логирования заголовков ответа;
  • ResponseBody - уровень логирования тела ответа;

Пример с явным указанием уровней логирования частей HTTP запроса :

/*...*/
[HttpGet]
[Logging(RequestUrl = LogLevel.Debug, ResponseHeaders = LogLevel.Error)]
public JsonResult Get()
{
    return new JsonResult("Everything is ok");
}
/*...*/

Также, можно указать один уровень логирования для всех частей запроса, передав его в качестве параметра аттрибута.

Пример с явным указанием уровней логирования частей HTTP запроса :

/*...*/
[HttpGet]
[Logging(LogLevel.None)]
public JsonResult Get()
{
    return new JsonResult("Everything is ok");
}
/*...*/

Аттрибут [LoggingS3].

Аттрибут [LoggingS3] применяется к методам контроллера, обабатывающюм запросы. В случае указания аттрибута без параметров, логирование указанного метода будет происходить в файл и сохраняться на сервер S3.

Пример использования аттибута [LoggingS3]:

/*...*/
[HttpGet]
[LoggingS3]
public JsonResult Get()
{
    return new JsonResult("Everything is ok");
}
/*...*/

В случае, когда необходимо указать, что запись в файл не требуется, нужно указать аттрибут false в качестве параметра [Logging(false)].

Пример явного отключения записи логов в S3:

/*...*/
[HttpGet]
[LoggingS3(false)]
public JsonResult Get()
{
    return new JsonResult("Everything is ok");
}
/*...*/

Showing the top 20 packages that depend on Expero.Libraries.CSharp.Logging.

Packages Downloads
Expero.Libraries.CSharp.BackgroundTasks
Пакет для работы с фоновыми задачами.
1

Version Downloads Last updated
1.6.2 1 02/28/2026
1.6.1 1 02/28/2026
1.6.0 1 02/28/2026
1.6.0-beta.78716 1 02/28/2026
1.6.0-beta.78714 1 02/28/2026
1.5.0 1 02/28/2026
1.5.0-beta.65659 1 02/28/2026
1.4.2-beta.52735 1 02/28/2026
1.4.0 1 02/28/2026
1.4.0-beta.56537 1 02/28/2026
1.4.0-beta.52845 1 02/28/2026
1.3.0 1 02/28/2026
1.2.1 1 02/28/2026
1.2.0 1 02/28/2026
1.1.1-beta.46062 1 02/28/2026
1.1.1-beta.45837 1 02/28/2026
1.1.1-beta.45076 1 02/28/2026
1.1.0 1 02/28/2026
1.0.0 1 02/28/2026