public override async Task Invoke(IIncomingPhysicalMessageContext context, Func <Task> next)
    {
        string messageTypeName;
        var    headers = context.MessageHeaders;

        if (headers.TryGetValue(Headers.EnclosedMessageTypes, out var messageType))
        {
            messageTypeName = TypeHelper.GetShortTypeName(messageType);
        }
        else
        {
            messageTypeName = "UnknownMessageType";
        }

        var logger     = logBuilder.GetLogger(messageTypeName);
        var properties = new List <PropertyEnricher>
        {
            new PropertyEnricher("IncomingMessageId", context.MessageId),
            new PropertyEnricher("IncomingMessageType", messageTypeName)
        };


        if (headers.TryGetValue(Headers.CorrelationId, out var correlationId))
        {
            properties.Add(new PropertyEnricher("CorrelationId", correlationId));
        }

        if (headers.TryGetValue(Headers.ConversationId, out var conversationId))
        {
            properties.Add(new PropertyEnricher("ConversationId", conversationId));
        }

        var exceptionLogState = new ExceptionLogState
                                (
            processingEndpoint: endpoint,
            incomingMessageId: context.MessageId,
            incomingMessageType: messageTypeName,
            incomingHeaders: context.MessageHeaders,
            correlationId: correlationId,
            conversationId: conversationId
                                );

        var loggerForContext = logger.ForContext(properties);

        context.Extensions.Set(exceptionLogState);
        context.Extensions.Set(loggerForContext);

        try
        {
            await next();
        }
        catch (Exception exception)
        {
            exception.Data.Add("ExceptionLogState", exceptionLogState);
            throw;
        }
    }
Example #2
0
    public override async Task Invoke(IIncomingPhysicalMessageContext context, Func <Task> next)
    {
        var properties = new List <PropertyEnricher>
        {
            new("IncomingMessageId", context.MessageId)
        };

        ILogger logger;
        var     headers = context.MessageHeaders;

        if (headers.TryGetValue(Headers.EnclosedMessageTypes, out var enclosedMessageTypes))
        {
            var split = enclosedMessageTypes.Split(';');
            var names = split.Select(TypeNameConverter.GetName).ToList();
            properties.Add(new("IncomingMessageTypes", names));
            properties.Add(new("IncomingMessageTypesLong", split));
            var messageTypeName = string.Join(";", names);
            logger = logBuilder.GetLogger(messageTypeName);
        }
        else
        {
            properties.Add(new("IncomingMessageTypes", Array.Empty <string>()));
            properties.Add(new("IncomingMessageTypesLong", Array.Empty <string>()));

            logger = logBuilder.GetLogger("UnknownMessageTypes");
        }

        if (headers.TryGetValue(Headers.CorrelationId, out var correlationId))
        {
            properties.Add(new("CorrelationId", correlationId));
        }

        if (headers.TryGetValue(Headers.ConversationId, out var conversationId))
        {
            properties.Add(new("ConversationId", conversationId));
        }

        var exceptionLogState = new ExceptionLogState
                                (
            processingEndpoint: endpoint,
            incomingHeaders: context.MessageHeaders,
            correlationId: correlationId,
            conversationId: conversationId
                                );

        var loggerForContext = logger.ForContext(properties);

        context.Extensions.Set(exceptionLogState);
        context.Extensions.Set(loggerForContext);

        try
        {
            await next();
        }
        catch (Exception exception)
        {
            var data = exception.Data;
            if (!data.Contains("ExceptionLogState"))
            {
                data.Add("ExceptionLogState", exceptionLogState);
            }

            throw;
        }
    }