Изменение форматирования журнала во время размещения ASP.NET приложение в Docker

c# #docker

#c# #docker

Вопрос:

Все журналы консоли форматируются с помощью SimpleConsoleFormatter (до тех пор, пока этот параметр не будет переопределен) и вывода по умолчанию при запуске ASP.NET приложение на Kestrel выглядит следующим образом:

 info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://localhost:7007
 

Но когда я использую Docker для размещения своего приложения, похоже, что вместо этого используется JsonConsoleFormatter. Это всего лишь мое предположение… Но в любом случае, результат теперь выглядит следующим образом:

 docker-webapi-1       | {"EventId":14,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: https://[::]:443","State":{"Message":"Now listening on: https://[::]:443","address":"https://[::]:443","{OriginalFormat}":"Now listening on: {address}"}}
 

Как я могу сделать так, чтобы выходные данные Docker выглядели одинаково, когда я просто использую Kestrel? Спасибо.

Чего я хочу добиться при использовании Docker:

 info: Microsoft.Hosting.Lifetime[14]
      Now listening on: https://[::]:443
 

Ответ №1:

Образы aspnet docker устанавливают переменную среды Logging__Console__FormatterName на json , потому что Microsoft считает, что большинство людей, которые запускают.Сетевой код в контейнерах Docker предпочитает этот формат.

Чтобы вернуть его к простому форматированию, вам необходимо установить переменную среды на Simple , добавив

 ENV Logging__Console__FormatterName=Simple
 

где-то в вашем Dockerfile.

На Github есть открытый вопрос об изменении: https://github.com/dotnet/dotnet-docker/issues/3274