Serilog .Веб-API NET CORE 5 — отображается в журналах Docker

#docker #serilog #.net-5

#docker #serilog #.net-5

Вопрос:

У меня есть чрезвычайно простой веб-api, созданный с помощью .NET Core 5, который настроен для размещения в контейнере Docker Linux. Все, что я хочу сделать, это, чтобы мой консольный вывод отображался в журналах Docker, как это было в прошлых версиях .NET Core.

Вот мой основной метод в Program.cs

 var LOG_EVENT_LEVEL = Environment.GetEnvironmentVariable("LOG_EVENT_LEVEL");
var logEventLevel = LOG_EVENT_LEVEL != null
    ? Enum.Parse<LogEventLevel>(LOG_EVENT_LEVEL)
    : LogEventLevel.Information;

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(logEventLevel)
    .CreateLogger();

Log.Information("START");
 

Я бы подумал, что вывод «START» должен отображаться в моих журналах Docker, но это не так. Я вижу их в окне отладки VS, как и ожидалось. Что-то изменилось в .NET Core 5?

Комментарии:

1. Большое вам спасибо за то, что задали этот вопрос. Я пытаюсь разобраться в этом уже 2 дня. Мое контейнерное приложение .NET Core также перестало отправлять журналы в Docker, что уничтожает всю мою систему ведения журналов (моя настройка перенаправляет журналы Docker в Seq). Как и вы, я все еще вижу журналы в окне отладки, но не в Docker. В отличие от вас, я все еще на .NET Core 3.1, поэтому я не думаю, что это связано с обновлением .NET Core 5. Единственное, что я изменил до того, как мои журналы перестали работать, — это автоматическое обновление рабочего стола Docker с 3.0.0 до 3.0.4. Я предполагаю, что виновником является обновление, но я не знаю почему.

Ответ №1:

Итак, получается, что Visual Studio использует стандартный вывод контейнера во время отладки. Если вы вручную запустите контейнер на своем компьютере, вы увидите выходные данные в журналах как обычно.