Saltar al contenido principal

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.
  • Domain permanece 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 em Application.