Загрузка конфигурации логгера занимает много времени при запуске - PullRequest
0 голосов
/ 24 января 2020

Недавно я перенес проект в AspNetCore 3.1 с версии 2.2 и начал использовать Visual Studio 2019. С тех пор запуск приложения занимает около одной минуты. Большую часть времени приложение получает nlog.config:

 public Startup(IConfiguration configuration, IHostingEnvironment env)
    {
        Configuration = configuration;
        LogManager.LoadConfiguration(System.String.Concat
(Directory.GetCurrentDirectory(), "/nlog.config")); //here's where it hangs

        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            //.AddJsonFile($"rabbitConfig.json", optional: true, reloadOnChange: true)
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

Я знаю, что IHostingEnvironment устарел, может ли это вызвать эту проблему? Что я должен изменить, чтобы он загружался быстрее?

Ответы [ 2 ]

3 голосов
/ 25 января 2020

Если у ваших коллег нет проблем, то вы, скорее всего, стали жертвой нелепой медленной загрузки символов в Visual Studio 2019. Один из способов - Включить только мой код

Вы можете попробовать и пропустить автоматическое сканирование c для сборок для загрузки расширений NLog:

public Startup(IConfiguration configuration, IHostingEnvironment env)
{
   Configuration = configuration;

   //disable NLog assembly scanning
   NLog.Config.ConfigurationItemFactory.Default = new NLog.Config.ConfigurationItemFactory(typeof(NLog.ILogger).GetTypeInfo().Assembly);

   //here's where it hangs
   NLog.LogManager.LoadConfiguration(System.String.Concat(Directory.GetCurrentDirectory(), "/nlog.config"));

    ...
}

Также рекомендуется использовать NLog 4.6.8, так как он имеет несколько оптимизаций для ускорения загрузка конфигурации.

Обратите внимание, что если вы включили NLog InternalLogger на уровне трассировки, это также снизит производительность.

Помните, что если вы отключите MEL-Console-Logger по умолчанию, или отфильтровывает сообщения Info-Level от Microsoft.Hosting.Lifetime -Logger, после чего среда хостинга будет ожидать время ожидания ожидаемых сообщений при запуске. Обязательно настройте вывод NLog-Console или сохраните вывод AddConsole:

https://github.com/NLog/NLog.Web/wiki/Hosting-Lifetime-Startup-Messages

In ASP. NET Core 2, тогда он будет пишите напрямую в консоль, но с ASP. NET Core 3, затем он использует MEL-ILogger с именем Microsoft.Hosting.Lifetime (не забудьте настроить MEL-Filter и NLog-Filter, чтобы не отбрасывать эти сообщения в ASP. NET Core 3)

1 голос
/ 21 февраля 2020

Проверьте ваши расширения в конфиге. Вероятно, библиотека не существует, что явно вызывает эту проблему при загрузке NLog. Я предполагаю, что NLog ищет DLL или, как сказал Рольф, пытается загрузить pdb (за исключением того, что он не существует).

<extensions>
    <add assembly="NLog.Extended" />
</extensions>

В моем случае NLog.Extended необходимо изменить на NLog.Web.AspNetCore, поскольку NLog.Extended не существует в ядре. net. Который сводится к вставке неверной копии из другого проекта.

Пользователь NLog должен проверить свой nlog.config и использовать правильный пример для своей целевой структуры, такой как: AspNetCore 2 или AspNetCore 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...