Logging na Application
Definimos nesta página como centralizar o logging na Application, preservando a pureza do Domain e garantindo observabilidade consistente nos casos de uso.
Princípios
- Logging é responsabilidade da camada de
Application. Domainpermanece puro, sem logging.
Exemplo
public sealed class PlaceOrderService : IPlaceOrder
{
private readonly IOrderRepository orderRepository;
private readonly IUnitOfWork unitOfWork;
private readonly ILogger<PlaceOrderService> logger;
public PlaceOrderService(IOrderRepository orderRepository, IUnitOfWork unitOfWork, ILogger<PlaceOrderService> logger)
{
this.orderRepository = orderRepository;
this.unitOfWork = unitOfWork;
this.logger = logger;
}
public async Task ExecuteAsync(PlaceOrderCommand command, CancellationToken ct)
{
logger.LogInformation("Iniciando PlaceOrder para {CustomerId}", command.CustomerId);
var order = Order.Create(command.CustomerId, command.Lines);
await orderRepository.AddAsync(order, ct);
await unitOfWork.CommitAsync(ct);
logger.LogInformation("Pedido {OrderId} criado.", order.Id);
}
}
Observações
- Logs técnicos de infraestrutura podem existir em
Infra, mas a orquestração de logs do caso de uso acontece emApplication.