sanitizer property
Глобальный санитайзер выводимых значений.
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;