using System; using System.Threading; using System.Threading.Tasks; using MediatR; using Microsoft.Extensions.Logging; namespace HN.Infrastructure.Behaviors { public sealed class LoggerBehavior : IPipelineBehavior { private readonly ILoggerFactory _factory; public LoggerBehavior(ILoggerFactory factory) { _factory = factory; } public async Task Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate next) { var logger = _factory.CreateLogger(request.GetType()); logger.LogInformation("Processing request {0} at {1}", request, DateTime.Now); var response = await next(); logger.LogInformation("Processed request {0} at {1}", request, DateTime.Now); return response; } } }