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; } }
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; } }