using System; using Tapeti.Config; using ISerilogLogger = Serilog.ILogger; // ReSharper disable UnusedMember.Global namespace Tapeti.Serilog { /// /// /// Implements the Tapeti ILogger interface for Serilog output. /// public class TapetiSeriLogger: ILogger { private readonly ISerilogLogger seriLogger; /// public TapetiSeriLogger(ISerilogLogger seriLogger) { this.seriLogger = seriLogger; } /// public void Connect(TapetiConnectionParams connectionParams, bool isReconnect) { seriLogger .ForContext("isReconnect", isReconnect) .Information("Tapeti: trying to connect to {host}:{port}/{virtualHost}", connectionParams.HostName, connectionParams.Port, connectionParams.VirtualHost); } /// public void ConnectFailed(TapetiConnectionParams connectionParams, Exception exception) { seriLogger.Error(exception, "Tapeti: could not connect to {host}:{port}/{virtualHost}", connectionParams.HostName, connectionParams.Port, connectionParams.VirtualHost); } /// public void ConnectSuccess(TapetiConnectionParams connectionParams, bool isReconnect) { seriLogger .ForContext("isReconnect", isReconnect) .Information("Tapeti: successfully connected to {host}:{port}/{virtualHost}", connectionParams.HostName, connectionParams.Port, connectionParams.VirtualHost); } /// public void ConsumeException(Exception exception, IMessageContext messageContext, ConsumeResult consumeResult) { var contextLogger = seriLogger .ForContext("consumeResult", consumeResult) .ForContext("exchange", messageContext.Exchange) .ForContext("queue", messageContext.Queue) .ForContext("routingKey", messageContext.RoutingKey); if (messageContext is IControllerMessageContext controllerMessageContext) { contextLogger = contextLogger .ForContext("controller", controllerMessageContext.Binding.Controller.FullName) .ForContext("method", controllerMessageContext.Binding.Method.Name); } contextLogger.Error(exception, "Tapeti: exception in message handler"); } } }