Как контролировать уровень журнала в ядре ASP.Net Интеграционные тесты - PullRequest
2 голосов
/ 10 октября 2019

Я пытаюсь ограничить объем печатной информации журнала при выполнении интеграционных тестов для ядра asp.net. В настоящее время печатается все до уровня отладки, и это скрывает полезную информацию. Я действительно хотел бы ограничить это предупреждением и выше.

Я запускаю интеграционные тесты, используя пример на https://docs.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-2.2#customize-webapplicationfactory

public class CustomWebApplicationFactory<TStartup> 
    : WebApplicationFactory<TStartup> where TStartup: class
{
    protected override void ConfigureWebHost(IWebHostBuilder builder)
    {
        builder.ConfigureServices(services =>
        {
            // Create a new service provider.
            var serviceProvider = new ServiceCollection()
                .AddEntityFrameworkInMemoryDatabase()
                .BuildServiceProvider();

            // Add a database context (ApplicationDbContext) using an in-memory 
            // database for testing.
            services.AddDbContext<ApplicationDbContext>(options => 
            {
                options.UseInMemoryDatabase("InMemoryDbForTesting");
                options.UseInternalServiceProvider(serviceProvider);
            });

            // Build the service provider.
            var sp = services.BuildServiceProvider();

            // Create a scope to obtain a reference to the database
            // context (ApplicationDbContext).
            using (var scope = sp.CreateScope())
            {
                var scopedServices = scope.ServiceProvider;
                var db = scopedServices.GetRequiredService<ApplicationDbContext>();
                var logger = scopedServices
                    .GetRequiredService<ILogger<CustomWebApplicationFactory<TStartup>>>();

                // Ensure the database is created.
                db.Database.EnsureCreated();

                try
                {
                    // Seed the database with test data.
                    Utilities.InitializeDbForTests(db);
                }
                catch (Exception ex)
                {
                    logger.LogError(ex, "An error occurred seeding the database. Error: {Message}", ex.Message);
                }
            }
        });
    }
}

Журналы:

dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[4]
      Hosting started
dbug: Microsoft.AspNetCore.Hosting.Internal.WebHost[0]
      Loaded hosting startup assembly BackEnd.Api
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/2.0 GET http://localhost/test
dbug: Microsoft.AspNetCore.HostFiltering.HostFilteringMiddleware[0]
      Wildcard detected, all requests with hosts will be allowed.
...lots more dbug logs...

Вещи, которые я пробовал в ConfigureWebHost:

            builder.ConfigureLogging(o =>
            {
                o.SetMinimumLevel(LogLevel.Warning);
            });

Нет эффекта. Я не мог придумать какую-либо другую комбинацию уровней и фильтров, которые бы оказали какое-либо влияние.

            builder.ConfigureLogging(o =>
            {
                o.ClearProviders();
            });

Останавливает все журналы, но это не совсем то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 25 октября 2019

Я решил это для моего случая. В appsettings.json для основного приложения asp.net, которое я тестировал, был следующий конфиг:

    "Console": {
      "LogLevel": {
        "Default": "Debug"
      }
    }

Кажется, что это отменит любые изменения фильтрации или уровня, которые я сделал в коде дляинтеграционные тесты. Изменение этого уровня на Warning решило мою проблему.

0 голосов
/ 11 октября 2019

Попробуйте использовать AddFilter как

builder.ConfigureLogging(o=> {
            //o.SetMinimumLevel(LogLevel.Warning);
            o.AddFilter(logLevel => logLevel >= LogLevel.Warning);
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...