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());
        }
Ejemplo n.º 2
0
        public void Initialize(ITelemetry telemetry)
        {
            if (telemetry == null)
            {
                return;
            }

            var requestId = correlationProvider.SetCorrelationId();

            if (requestId.HasValue)
            {
                telemetry.Context.GlobalProperties[Constants.CorrelationIdHeader] = requestId.Value.ToString();
            }
        }