static void TestLog(Microsoft.Extensions.Logging.ILogger logger) { using (logger.SetRequestScope("my correlation id")) { logger.LogRequest("my custom log message"); } }
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"); }); }