#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 использует стандартный вывод контейнера во время отладки. Если вы вручную запустите контейнер на своем компьютере, вы увидите выходные данные в журналах как обычно.