// *********************************************************************** // // AgileWebs // // *********************************************************************** using Microsoft.AspNetCore.Http; using Microsoft.IO; using Serilog; namespace Core.Blueprint.Logging { /// /// Handles HTTP logging. /// public class HttpLoggingMiddleware { private readonly ILogger logger; private readonly RequestDelegate requestProcess; private readonly ServiceSettings settings; private readonly RecyclableMemoryStreamManager recyclableMemoryStreamManager; /// /// Creates a new instrance of . /// /// The request delegate process. /// The logger representig an instance of . /// The service settings. public HttpLoggingMiddleware(RequestDelegate requestProcess, ILogger logger, ServiceSettings settings) { this.logger = logger; this.requestProcess = requestProcess; this.settings = settings; recyclableMemoryStreamManager = new RecyclableMemoryStreamManager(); } /// /// Invoke method. /// /// The HTTP context. /// public async Task Invoke(HttpContext context) { await LogRequest(context); await LogResponse(context); } /// /// Logs an incoming HTTP request. /// /// The HTTP context. /// A representing the asynchronous operation. private async Task LogRequest(HttpContext context) { await logger.LogRequest(context, recyclableMemoryStreamManager, $"{settings.ApplicationName}-{settings.LayerName}"); } /// /// Logs an outcome HTTP response. /// /// The HTTP context. /// A representing the asynchronous operation. private async Task LogResponse(HttpContext context) { await logger.LogResponse(context, recyclableMemoryStreamManager, requestProcess, $"{settings.ApplicationName}-{settings.LayerName}"); } } }