sanitizer property

LogValueSanitizer? sanitizer
getter/setter pair

Глобальный санитайзер выводимых значений.

null (по умолчанию) — вывод без обработки и без накладных расходов. Применяется в objectToString и objectToJson, то есть ко ВСЕМ выводам: publisher'ам, in-app просмотрщику логов, экспорту сессий.

Каждое значение обрабатывается ровно один раз, тем местом, которое знает его позицию (свойство, ключ Map, индекс элемента). Правило получает SanitizeContext и возвращает исходное значение, замену или Sanitize.drop.

Loggable.sanitizer = (ctx) => switch (ctx.name) {
  'password' || 'token' => Sanitize.drop,
  _ => ctx.value,
};

Правило обязано быть чистой функцией от SanitizeContext: без побочных эффектов (сам факт вызова не гарантирует, что значение будет напечатано, — см. спеку, «Циклы, лимиты, ленивость») и без рендеринга. Рендеринг — это не только явные objectToString/objectToJson, но и интерполяция '${ctx.value}' либо ctx.value.toString() для Loggable, LoggableData, LoggableWrapper и LoggableMultiData: их toString заходит в те же обходчики, из которых правило и было вызвано. Логировать изнутри правила тоже нельзя.

Санитайзер — статическое поле, то есть живёт в пределах одного изолята: правило, установленное в главном изоляте, не применится к логам, отрисованным в порождённом, — там его нужно установить заново.

Implementation

static LogValueSanitizer? sanitizer;