| File: Buffering\PerRequestLogBufferingIncludeScopesTests.cs | Web Access |
| Project: src\test\Libraries\Microsoft.AspNetCore.Diagnostics.Middleware.Tests\Microsoft.AspNetCore.Diagnostics.Middleware.Tests.csproj (Microsoft.AspNetCore.Diagnostics.Middleware.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #if NET9_0_OR_GREATER using System.Net.Http; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.TestHost; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Diagnostics.Buffering; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting.Testing; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; using Xunit; namespace Microsoft.AspNetCore.Diagnostics.Buffering.Test; public class PerRequestLogBufferingIncludeScopesTests { private const string RequestPath = "/scoped"; [Theory] [InlineData(true)] [InlineData(false)] public async Task IncludeScopes_ControlsWhetherScopesAreAddedToBufferedLogRecords(bool includeScopes) { using IHost host = await FakeHost.CreateBuilder() .ConfigureWebHost(builder => builder .UseTestServer() .ConfigureLogging(logging => logging .AddPerIncomingRequestBuffer(options => { options.IncludeScopes = includeScopes; options.Rules.Add(new LogBufferingFilterRule(categoryName: "test", logLevel: LogLevel.Information)); })) .Configure(app => app.Run(static context => { ILogger logger = context.RequestServices.GetRequiredService<ILoggerFactory>().CreateLogger("test"); using (logger.BeginScope("Order {OrderId}", 42)) { logger.LogInformation("buffered"); } context.RequestServices.GetRequiredService<PerRequestLogBuffer>().Flush(); return Task.CompletedTask; }))) .StartAsync(); using HttpClient client = host.GetTestClient(); using HttpResponseMessage response = await client.GetAsync(RequestPath); FakeLogRecord record = Assert.Single(host.GetFakeLogCollector().GetSnapshot(), r => r.Message == "buffered"); Assert.Equal(includeScopes ? "42" : null, record.GetStructuredStateValue("OrderId")); // The request scope is begun by ASP.NET Core with a different logger than the one which logged the record. Assert.Equal(includeScopes ? RequestPath : null, record.GetStructuredStateValue("RequestPath")); } } #endif