Expero.Libraries.CSharp.Logging 1.1.1-beta.45837
Expero.Libraries.CSharp.Logging
Пакет для работы с логированием.
Пакет содержит:
- Middleware для логирования HTTP запросов;
- Аттрибут, для настройки разных уровней логирования для разных частей запроса конкретного
endpoint; - Возможность сохранения логов в ObjectStorage (S3);
- Аттрибут, для включения/отключения сохранения логов в S3 для конкретного
endpoint; - Методы, для упрощенной регистрации Middleware и сервисов для логирования;
- Интерфейс IHttpLoggingHandler для создания собственных обработчиков логов.
- Возможность записи в лог собственных сообщений
Executing endpointиExecutied endpointс уровнем логированияDebug;
Подключение к проекту.
Для подключения логирвания HTTP к проекту необходимо добавить сервис и зарегестрировать Middleware. Для регистрации сервисов в пакете есть 2 метода:
AddExperoHttpLogging(LoggingSettings).
AddExperoHttpLogging(Action<LoggingSettings>).
Модель HttpLoggingSettings содержит настройки уровней логирования для разных частей запроса. Уровень логирования это стандартный enum LogLevel из Microsoft.Extensions.Logging:
RequestExecutingLevel- уровень логирования сообщенийExecuting endpointиExecutied endpoint;RequestUrlLevel- уровень логирования Url;RequestQueryLevel- уровень логирования Query-параметров;RequestHeadersLevel- уровень логирования заголовков запроса;RequestBodyLevel- уровень логирования тела запроса;ResponseStatusCodeLevel- уровень логирования StatusCode ответа;ResponseHeadersLevel- уровень логирования заголовков ответа;ResponseBodyLevel- уровень логирования тела ответа;UseObjectStorage- флаг, указывающий сохранение в S3 всех логов;S3Configurationнастройки сервера S3;
N.B. При использовании RequestExecutingLevel рекомендуется установить уровень логирования Microsoft.AspNetCore.Routing в уровень выше Information, например Warning. Это отключит штатные сообщения Executing endpoint и Executied endpoint с уровнем выше указанного, иначе они будут дублироваться.
"Serilog": {
"Other": {
"Microsoft.AspNetCore.Routing": "Warning"
}
Кроме того, необходимо добавить Middleware к приложению. Для этого надо вызвать метод UseExperoHttpLogging() у ApplicationBuilder, причем обязательно после UseRouting().
После этого, все HTTP запросы к endpoint будут логироваться с заданным уровнем.
Пример добавления в проект:
public void AddService(IServiceCollection services)
{
/*...*/
services.AddExperoHttpLogging(settings =>
{
settings.RequestExecutingLevel = LogLevel.None;
settings.RequestUrlLevel = LogLevel.Debug;
settings.RequestQueryLevel = LogLevel.Debug;
settings.RequestHeadersLevel = LogLevel.Debug;
settings.RequestBodyLevel = LogLevel.Debug;
settings.ResponseStatusCodeLevel = LogLevel.Debug;
settings.ResponseHeadersLevel = LogLevel.Debug;
settings.ResponseStatusCodeLevel = LogLevel.Debug;
settings.ResponseBodyLevel = true;
settings.S3Configuration = new HttpLoggingS3Configuration
{
Host = "s3.expero.ru",
Ssl = true,
AccessKey = "sdgfertfdsafsa",
SecretKey = "dfkxkclkwoeewrjzklfskdknvcsdhfkja",
Bucket = new ObjectStorageS3BucketName("portal-log")
};
});
/*...*/
}
public static void UseApi(this IApplicationBuilder app)
{
/*...*/
app.UseRouting();
app.UseExperoHttpLogging();
/*...*/
}
либо через создание экземпляра HttpLoggingSettings:
public void AddService(IServiceCollection services)
{
/*...*/
var settings = new LoggingSettings()
{
RequestExecutingLevel = LogLevel.None,
RequestUrlLevel = LogLevel.Debug,
RequestQueryLevel = LogLevel.Debug,
RequestHeadersLevel = LogLevel.Debug,
RequestBodyLevel = LogLevel.Debug,
ResponseStatusCodeLevel = LogLevel.Debug,
ResponseHeadersLevel = LogLevel.Debug,
ResponseStatusCodeLevel = LogLevel.Debug,
ResponseBodyLevel = true,
S3Configuration = new HttpLoggingS3Configuration
{
Host = "s3.expero.ru",
Ssl = true,
AccessKey = "sdgfertfdsafsa",
SecretKey = "dfkxkclkwoeewrjzklfskdknvcsdhfkja",
Bucket = new ObjectStorageS3BucketName("portal-logs")
}
};
services.AddExperoHttpLogging(settings);
/*...*/
}
public static void UseApi(this IApplicationBuilder app)
{
/*...*/
app.UseRouting();
app.UseExperoHttpLogging();
/*...*/
}
Аттрибут [HttpLogging].
Аттрибут [HttpLogging] применяется к методам контроллера, обабатывающюм запросы для указания уровней логирования разным частям запроса. Также с помощью аттрибута можно указать, чтобы лог сохранялся в ObjectStorage.
Пример использования аттибута [HttpLogging]:
Чтобы указать какие части запроса каким уровнем необходимо логировать, нужно передать их в качестве параметров аттрибута [HttpLogging(...)]. При этом части запроса, которые ны были явно указаны, будут логироваться с уровнем, указанным при подключении пакета. Доступные настройки имеют те же названия, что и в настройках при подключении:
RequestExecutingLevel- уровень логирования сообщенийExecuting endpointиExecutied endpoint;RequestUrlLevel- уровень логирования Url;RequestQueryLevel- уровень логирования Query-параметров;RequestHeadersLevel- уровень логирования заголовков запроса;RequestBodyLevel- уровень логирования тела запроса;ResponseStatusCodeLevel- уровень логирования StatusCode ответа;ResponseHeadersLevel- уровень логирования заголовков ответа;ResponseBodyLevel- уровень логирования тела ответа;UseObjectStorage- флаг, указывающий сохранение в S3 всех логов;
Пример с явным указанием уровней логирования частей HTTP запроса:
/*...*/
[HttpGet]
[HttpLogging(RequestUrlLevel = LogLevel.Debug, ResponseHeadersLevel = LogLevel.Error)]
public JsonResult Get()
{
return new JsonResult("Everything is ok");
}
/*...*/
Также, можно указать один уровень логирования для всех частей запроса, передав его в качестве параметра аттрибута.
Пример с явным указанием уровней логирования частей HTTP запроса:
/*...*/
[HttpGet]
[HttpLogging(LogLevel.None)]
public JsonResult Get()
{
return new JsonResult("Everything is ok");
}
/*...*/
Параметр UseObjectStorage позволяет явно указать конкретному запросу, надо ли сохранять в ObjectStorage лог.
/*...*/
[HttpGet]
[HttpLogging(UseObjectStorage = true)]
public JsonResult Get()
{
return new JsonResult("Everything is ok");
}
/*...*/
Создание собственных обработчиков логирования частей Http запроса.
Пакет содержит интерфейс IHttpLoggingHandler, у которого можно реализовать собственные методы для логирования конкретных частей запроса. Все методы реализовывавть не обязательно. Для использования достаточно зарегистрировать свой handler в DI.
Пример:
/*...*/
internal class CustomHttpLoggingHandler : IHttpLoggingHandler
{
public CustomHttpLoggingHandler() { }
#region IHttpLoggingHandler
void IHttpLoggingHandler.LogRequestBody(string body, LogLevel level, IHttpLoggingContext context)
{
Console.WriteLine(level, body, context.HttpContext.Session.Id);
}
#endregion IHttpLoggingHandler
}
/*...*/
public void AddService(IServiceCollection services)
{
services.AddTransient<IHttpLoggingHandler, CustomHttpLoggingHandler>();
}
Showing the top 20 packages that depend on Expero.Libraries.CSharp.Logging.
| Packages | Downloads |
|---|---|
|
Expero.Libraries.CSharp.BackgroundTasks
Пакет для работы с фоновыми задачами.
|
1 |
.NET 7.0
- Expero.Libraries.CSharp.ObjectStorage.S3 (>= 2.4.0)
- Microsoft.AspNetCore.Mvc.NewtonsoftJson (>= 7.0.5)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 7.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 7.0.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 |