Код Middle Ошибки и логирование обновлено

Структурный лог с маскированием секретов

Условие

Напиши formatLog(level, msg, ctx, minLevel): возвращает строку JSON одной записи лога или null, если уровень ниже порога. Уровни по возрастанию: debug, info, warn, error.

Запись: { level, msg, ...ctx } (поля в этом порядке). Значения ключей password, token, authorization, cookie, secret (без учёта регистра) на любой глубине заменяются на "[REDACTED]". Входной ctx не изменять.

Примеры

formatLog("info", "user login", {"userId":7}, "info") // "{\"level\":\"info\",\"msg\":\"user login\",\"userId\":7}"
formatLog("debug", "sql", {"q":"select 1"}, "info") // null
formatLog("error", "x", {}, "warn") // "{\"level\":\"error\",\"msg\":\"x\"}"

Как подойти

Подсказки: 2
  1. Рекурсивная копия с подменой значений по имени ключа.
  2. Сравнивай ключ в нижнем регистре.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.