public virtual async Task InvokeAsync(HttpContext context, RequestDelegate next) { _logger.Here(l => l.Entering(_correlationProvider, CorrelationIdHeaderName, _obtainCorrelationIdFromRequestHeaders)); if (_obtainCorrelationIdFromRequestHeaders) { string lowerCaseCorrelationIdHeaderName = CorrelationIdHeaderName.ToLower(); Microsoft.Extensions.Primitives.StringValues headerValue = context.Request.Headers.FirstOrDefault(x => x.Key.ToLower() == lowerCaseCorrelationIdHeaderName).Value; if (headerValue.Count > 0) { var correlationValue = headerValue.First(); _logger.Here(l => l.LogTrace("Using {@0} header value {@1} as correlation id.", CorrelationIdHeaderName, correlationValue)); _correlationProvider.SetCorrelationId(correlationValue); } } CorrelationProvider.CurrentCorrelationProvider = _correlationProvider; using (_logger.BeginScope(new[] { new KeyValuePair <string, object>(Constants.CorrelationId, _correlationProvider.GetCorrelationId()) })) { await next(context); } _logger.Here(l => l.Exiting()); }
public void Initialize(ITelemetry telemetry) { if (telemetry == null) { return; } var requestId = correlationProvider.SetCorrelationId(); if (requestId.HasValue) { telemetry.Context.GlobalProperties[Constants.CorrelationIdHeader] = requestId.Value.ToString(); } }