public static void UseEmfMiddleware()

in src/Amazon.CloudWatch.EMF.Web/ApplicationBuilderExtensions.cs [14:54]


        public static void UseEmfMiddleware(this IApplicationBuilder app)
        {
            app.UseEmfMiddleware((context, logger) => {
                var dimensions = new Model.DimensionSet();
                var dimensionsWithStatusCode = new Model.DimensionSet();

                var endpoint = context.GetEndpoint();
                if (endpoint != null) {
                    var actionDescriptor = endpoint.Metadata.GetMetadata<ControllerActionDescriptor>();

                    dimensions.AddDimension("Controller", actionDescriptor.ControllerName);
                    dimensions.AddDimension("Action", actionDescriptor.ActionName);

                    dimensionsWithStatusCode.AddDimension("Controller", actionDescriptor.ControllerName);
                    dimensionsWithStatusCode.AddDimension("Action", actionDescriptor.ActionName);
                }

                dimensionsWithStatusCode.AddDimension("StatusCode", context.Response.StatusCode.ToString());
                logger.SetDimensions(dimensions, dimensionsWithStatusCode);

                // Include the X-Ray trace id if it is set
                // https://docs.aws.amazon.com/xray/latest/devguide/xray-concepts.html#xray-concepts-tracingheader
                var xRayTraceId = context.Request.Headers["X-Amzn-Trace-Id"];
                if (!String.IsNullOrEmpty(xRayTraceId) && xRayTraceId.Count > 0) {
                    logger.PutProperty("XRayTraceId", xRayTraceId[0]);
                }

                // If the request contains a w3c trace id, let's embed it in the logs
                // Otherwise we'll include the TraceIdentifier which is the connectionId:requestCount
                // identifier.
                // https://www.w3.org/TR/trace-context/#traceparent-header
                logger.PutProperty("TraceId", Activity.Current?.Id ?? context?.TraceIdentifier);

                if (!String.IsNullOrEmpty(Activity.Current?.TraceStateString)) {
                    logger.PutProperty("TraceState", Activity.Current.TraceStateString);
                }

                logger.PutProperty("Path", context.Request.Path);
                return Task.CompletedTask;
            });
        }