А кто-нибудь копался с разницей CreateBuilder vs CreateSlimBuilder?
Наткнулся на неожиданный сайд-эффект. CreateSlimBuilder не умеет подбирать форматтер логгера из конфига (application.json), то есть строчка "FormatterName": "json" игнорируется, при этом все остальное читается корректно.
На первый взгляд, разница между SlimBuilder и обычным, только в том, что первый подключает только SimpleConsole, а второй Console, Debug, EventSource и EventLog провайдеров.
Однако, следующий код к желаемому эффекту не приводит, например, json форматтер по прежнему из конфига не подхватывается.
При этом, если заглянуть в код Logger.Console, то там тоже только simple провайдер, а json-а нет. То есть, обычный билдер явно делает какую-то магию, чтобы нужный форматтер подгрузить из конфига, но я этой магии в упор не вижу. Кто-нибудь знает, как он это делает?
On Jun 5, 2024, 5:16 PM, IB <343@users.rsdn.org> wrote:
IB>А кто-нибудь копался с разницей CreateBuilder vs CreateSlimBuilder?
Разница между CreateBuilder и CreateSlimBuilder заключается в количестве подключаемых провайдеров по умолчанию. CreateBuilder подключает Console, Debug, EventSource, и EventLog провайдеры, а CreateSlimBuilder только SimpleConsole.
IB>Наткнулся на неожиданный сайд-эффект.
Все верно. CreateSlimBuilder действительно не подхватывает форматтеры из конфига, потому что он использует только SimpleConsole, который не поддерживает форматтеры. Когда вы используете CreateBuilder, он подключает полный Console провайдер, который умеет подгружать форматтеры из конфигурации.
IB>
Этот код не сработает, потому что AddConsole добавляет только SimpleConsole провайдер, а не полноценный Console провайдер, который поддерживает форматтеры.
Ну и не забыть добавить пакет Microsoft.Extensions.Logging.Console в проект, так как SimpleConsole идет из другого пакета (Microsoft.Extensions.Logging).
⸻ ❧ “Somewhere, something incredible is waiting to be known.” —Carl Sagan
R>Этот код не сработает, потому что AddConsole добавляет только SimpleConsole провайдер, а не полноценный Console провайдер, который поддерживает форматтеры.
да твоюж мать! То есть, и AddConsole и AddSimpleConsole добавляют SimpleConsole провайдер, а полноценный Console со всеми форматтерами нужно как-то по другому?
У меня цель простая, локально хочу чтобы SimpleConsole работал, а в бою json, и менять это только в конфиге, а не обкладываться if-ами в коде.
On Jun 7, 2024, 2:47 PM, IB <343@users.rsdn.org> wrote:
IB>да твоюж мать! То есть, и AddConsole и AddSimpleConsole добавляют SimpleConsole провайдер, а полноценный Console со всеми форматтерами нужно как-то по другому?
Ну да:
AddConsole добавляет полноценный ConsoleLoggerProvider, который поддерживает различные форматтеры (включая JSON). AddSimpleConsole добавляет упрощенный SimpleConsoleLoggerProvider, который не поддерживает такие форматтеры.
IB>У меня цель простая, локально хочу чтобы SimpleConsole работал, а в бою json, и менять это только в конфиге, а не обкладываться if-ами в коде.
Попробуйте сделать разные профили для локального конфига (appsettings.Development.json) и нет(appsettings.json).
⸻ ❧ “I never dreamed about success. I worked for it.” — Estée Lauder
R> R> AddConsole добавляет полноценный ConsoleLoggerProvider, который поддерживает различные форматтеры (включая JSON). R> AddSimpleConsole добавляет упрощенный SimpleConsoleLoggerProvider, который не поддерживает такие форматтеры. R>
Не, тут вообще какая-то мистика.
Пишу явно
Лезу в отладчик, вижу там зарегистрированный JsonFormatter в IServiceProvider
В конфиге стоит "FormatterName":"json"
В консоль все равно льется Simple
Я явно где-то упускаю какую-то очевидную фигню.
R>Попробуйте сделать разные профили для локального конфига (appsettings.Development.json) и нет(appsettings.json).
В смысле, разные профили? У меня так и есть — в development стоит simple, в app — json, но эта строчка просто игнорируется и подхватывается последний провайдер. При этом если сделать AddConsole, то это всегда Simple. Собственно, в этом и проблема.