Логування запитів в ASP.NET Core

pic

Створення Middleware для логування запитів в ASP.NET Core

Middleware в ASP.NET Core дозволяє обробляти HTTP запити та відповіді на різних етапах їх життєвого циклу. Логування вхідних запитів може бути дуже корисним для налагодження, аудиту чи моніторингу продуктивності вашого додатку. У цьому пості ми розглянемо, як створити власне middleware для логування запитів у додатку ASP.NET Core.

Що таке Middleware?

Middleware в ASP.NET Core — це програмне забезпечення, яке додається до конвеєра додатку для обробки запитів та відповідей. Кожен компонент middleware вирішує, чи передавати запит наступному компоненту в конвеєрі, і може виконувати дії до або після того, як наступний компонент обробить запит.

Налаштування проекту

Щоб розпочати, переконайтеся, що у вас встановлений .NET SDK. Ви можете створити новий проект ASP.NET Core за допомогою наступної команди:

> dotnet new webapi -n RequestLoggingDemo

Перейдіть до каталогу проекту:

> cd RequestLoggingDemo

Крок 1: Створення Middleware

Почнімо з того, що створимо новий файл під назвою RequestLoggingMiddleware.cs в корені вашого проекту (або в папці Middleware, якщо ви хочете організувати код).

Ось код для цього middleware:

using Microsoft.AspNetCore.Http;  
using System.Threading.Tasks;  
using System.IO;  
using Microsoft.Extensions.Logging;  

public class RequestLoggingMiddleware  
{  
 private readonly RequestDelegate _next;  
 private readonly ILogger _logger;  
 public RequestLoggingMiddleware(RequestDelegate next, ILogger logger)  
 {  
 _next = next;  
 _logger = logger;  
 }  
 public async Task InvokeAsync(HttpContext context)  
 {  
 context.Request.EnableBuffering();  
 // Читання тіла запиту (якщо воно є)  
 string requestBody;  
 using (var reader = new StreamReader(  
 context.Request.Body,  
 encoding: System.Text.Encoding.UTF8,  
 detectEncodingFromByteOrderMarks: false,  
 bufferSize: 1024,  
 leaveOpen: true))  
 {  
 requestBody = await reader.ReadToEndAsync();  
 context.Request.Body.Position = 0; // Скидання позиції потоку  
 }  
 // Логування деталей запиту  
 _logger.LogInformation($"HTTP {context.Request.Method} {context.Request.Path} {context.Request.QueryString}\nBody: {requestBody}");  
 // Виклик наступного middleware в конвеєрі  
 await _next(context);  
 }  
}

Крок 2: Додавання Middleware до конвеєра

У ASP.NET Core middleware додаються до конвеєра в файлі Program.cs. Оновіть ваш Program.cs, щоб додати middleware:

var builder = WebApplication.CreateBuilder(args);  

// Додавання сервісів до контейнера  
builder.Services.AddControllers();  

// Додавання логування  
builder.Logging.AddConsole();  

var app = builder.Build();  
// Додавання кастомного middleware  
app.UseMiddleware<RequestLoggingMiddleware>();  
// Налаштування конвеєра обробки запитів  
if (app.Environment.IsDevelopment())  
{  
 app.UseDeveloperExceptionPage();  
}  
app.UseHttpsRedirection();  
app.UseAuthorization();  
app.MapControllers();  
app.Run();

Крок 3: Запуск та тестування

Запустіть ваш додаток за допомогою наступної команди:

> dotnet run

Відправте запит до вашого API за допомогою інструменту, такого як Postman або curl. Наприклад:

curl -X POST https://localhost:5001/api/values -d '{"key": "value"}' -H "Content-Type: application/json"

Перевірте ваші консольні логи, щоб побачити деталі запиту:

info: RequestLoggingMiddleware[0]  
 HTTP POST /api/values  
 Body: {"key": "value"}

Налаштування middleware

Ви можете покращити middleware, щоб логувати додаткову інформацію, таку як заголовки або деталі відповіді.
Наприклад, ви можете логувати код статусу та тіло відповіді, обгортаючи _next(context) в блок try-finally і захоплюючи потік відповіді.

Висновок

Створення власного middleware в ASP.NET Core — це простий спосіб розширити функціональність вашого додатку. З middleware для логування запитів ви можете отримати краще розуміння запитів, які обробляє ваш додаток, що робить налагодження та моніторинг значно зручнішими. Спробуйте експериментувати з цим middleware і налаштуйте його під ваші специфічні потреби!

Для додаткової інформації відвідайте chrishibler.com

Перекладено з: ASP.NET Core Request Logging

Leave a Reply

Your email address will not be published. Required fields are marked *