hn-dotnet/Infrastructure/Behaviors/LoggerBehavior.cs

31 lines
843 B
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using MediatR;
using Microsoft.Extensions.Logging;
namespace HN.Infrastructure.Behaviors
{
public sealed class LoggerBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
private readonly ILoggerFactory _factory;
public LoggerBehavior(ILoggerFactory factory)
{
_factory = factory;
}
public async Task<TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate<TResponse> 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;
}
}
}