Использовали ли вы логирование в проектах?
Что проверяют
Умеете ли вы логировать так, чтобы по логам потом можно было разобрать инцидент в продакшене, а не просто писать в консоль. Следом обычно спрашивают про структурное логирование, уровни и то, где логи хранятся и как по ним ищут.
Как отвечать
Начните с конкретики своего проекта: что за сервис, чем логировали, куда уходили логи, и один случай, когда логи помогли найти проблему. Детали и цифры должны быть ваши. Технический каркас в .NET обычно такой:
- абстракция: код пишет в
ILogger<T>изMicrosoft.Extensions.Logging, а провайдер подключается отдельно: встроенная консоль, Serilog или NLog; - структурное логирование: шаблон сообщения с плейсхолдерами,
_logger.LogInformation("Заказ {OrderId} оплачен", orderId).OrderIdстановится полем, по которому потом ищут в Seq, Elasticsearch или Loki; - уровни:
Trace,Debug,Information,Warning,Error,Critical. Настраиваются вappsettings.jsonв секцииLogging:LogLevel, шум фреймворка, например категориюMicrosoft.AspNetCore, обычно поднимают доWarning; - корреляция:
BeginScopeдля контекста запроса и trace id из OpenTelemetry, чтобы собрать все записи одного запроса, прошедшего через несколько сервисов; - производительность: на горячих путях генератор
[LoggerMessage], он убирает лишние аллокации и упаковку аргументов.
Если работали только с Console.WriteLine или записью в файл, скажите честно и покажите, что знаете, как сделать правильно: какой провайдер выбрали бы, куда отправляли бы логи и чего туда писать нельзя. Нельзя пароли, токены, номера карт и лишние персональные данные.
Где спотыкаются
Пишут интерполяцию: LogInformation($"Заказ {id} оплачен"). Строка собирается даже при выключенном уровне, а id превращается в кусок текста, по которому уже не отфильтровать.
Логируют исключение как ex.Message. Теряются стек и вложенные исключения, правильно передавать сам объект: _logger.LogError(ex, "...").
Ловят исключение, логируют и пробрасывают дальше на каждом слое. Одна ошибка даёт пять одинаковых записей, и по логам уже не понять, сколько было инцидентов.