// ***********************************************************************
//
// 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}");
}
}
}