예제 #1
0
 static void TestLog(Microsoft.Extensions.Logging.ILogger logger)
 {
     using (logger.SetRequestScope("my correlation id"))
     {
         logger.LogRequest("my custom log message");
     }
 }
예제 #2
0
        public void LogRequestMessage_WithRequestAndResponse_CreatesRequestTelemetry()
        {
            // Arrange
            var     spySink     = new InMemoryLogSink();
            string  operationId = $"operation-id-{Guid.NewGuid()}";
            ILogger logger      = CreateLogger(
                spySink, config => config.Enrich.WithProperty(ContextProperties.Correlation.OperationId, operationId));

            var telemetryContext = new Dictionary <string, object>
            {
                ["Client"]      = "https://localhost",
                ["ContentType"] = "application/json",
            };
            var      request    = new HttpRequestMessage(System.Net.Http.HttpMethod.Get, new Uri("https://" + "localhost" + "/api/v1/health"));
            var      statusCode = HttpStatusCode.OK;
            var      response   = new HttpResponseMessage(statusCode);
            TimeSpan duration   = TimeSpan.FromSeconds(5);

            logger.LogRequest(request, response, duration, telemetryContext);

            LogEvent logEvent = Assert.Single(spySink.CurrentLogEmits);

            Assert.NotNull(logEvent);

            var converter = ApplicationInsightsTelemetryConverter.Create();

            // Act
            IEnumerable <ITelemetry> telemetries = converter.Convert(logEvent, formatProvider: null);

            // Assert
            AssertDoesNotContainLogProperty(logEvent, RequestTracking.RequestLogEntry);
            Assert.Collection(telemetries, telemetry =>
            {
                var requestTelemetry = Assert.IsType <RequestTelemetry>(telemetry);
                Assert.Equal("GET /api/v1/health", requestTelemetry.Name);
                Assert.Equal(duration, requestTelemetry.Duration);
                Assert.Equal(((int)statusCode).ToString(), requestTelemetry.ResponseCode);
                Assert.True(requestTelemetry.Success);
                Assert.Equal(operationId, requestTelemetry.Id);
                Assert.Equal(new Uri("https://localhost/api/v1/health"), requestTelemetry.Url);
                AssertOperationContext(requestTelemetry, operationId);

                AssertContainsTelemetryProperty(requestTelemetry, "Client", "https://localhost");
                AssertContainsTelemetryProperty(requestTelemetry, "ContentType", "application/json");
            });
        }