Re[4]: CreateSlimBuilder и ILogger
От: IB Австрия http://rsdn.ru
Дата: 07.06.24 12:47
Оценка:
Здравствуйте, r0nd, Вы писали:


R>Ну да:

R> Не, тут вообще какая-то мистика.
Пишу явно
            loggingBuilder.ClearProviders();
            ConsoleLoggerExtensions.AddConsole(loggingBuilder);


Ставлю дебаггер вот на этом коде фреймворка, вижу как добавляется
    public static ILoggingBuilder AddConsole(this ILoggingBuilder builder)
    {
      builder.AddConfiguration();
      builder.AddConsoleFormatter<JsonConsoleFormatter, JsonConsoleFormatterOptions, ConsoleFormatterConfigureOptions>();  /// <==
      builder.AddConsoleFormatter<SystemdConsoleFormatter, ConsoleFormatterOptions, ConsoleFormatterConfigureOptions>();
      builder.AddConsoleFormatter<SimpleConsoleFormatter, SimpleConsoleFormatterOptions, ConsoleFormatterConfigureOptions>();
      builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider, ConsoleLoggerProvider>());
      builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IConfigureOptions<ConsoleLoggerOptions>, ConsoleLoggerConfigureOptions>());
      builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IOptionsChangeTokenSource<ConsoleLoggerOptions>, LoggerProviderOptionsChangeTokenSource<ConsoleLoggerOptions, ConsoleLoggerProvider>>());
      return builder;
    }


Лезу в отладчик, вижу там зарегистрированный JsonFormatter в IServiceProvider
В конфиге стоит "FormatterName":"json"
В консоль все равно льется Simple
Я явно где-то упускаю какую-то очевидную фигню.


R>Попробуйте сделать разные профили для локального конфига (appsettings.Development.json) и нет(appsettings.json).

В смысле, разные профили? У меня так и есть — в development стоит simple, в app — json, но эта строчка просто игнорируется и подхватывается последний провайдер. При этом если сделать AddConsole, то это всегда Simple. Собственно, в этом и проблема.
Мы уже победили, просто это еще не так заметно...