В целях ведения журнала вместо использования метода toString()
в проекте, над которым я работал, использовался метод Джексона writeValueAsString(object)
.
LOGGER.info(mapper.writeValueAsString(object));
Теперь я получил требование маскировать конфиденциальную информацию, такую как пароли и номера кредитных карт, в журналах. Если используется toString()
, я мог бы удалить эти конфиденциальные данные из метода toString()
. Но в моем случае я не смог найти такого простого, но правильного способа решения моей проблемы. Я не в ситуации, когда я могу изменить все, чтобы использовать toString()
.
Я прочитал, что, используя метод %replace
, я могу заменить данные, которые мне не нужно регистрировать, используя предопределенный шаблон. Но все конфиденциальные данные, которые необходимо замаскировать, не будут следовать единому шаблону.
Я попытался перехватить событие журнала, найти конкретную информацию и замаскировать ее (используя класс, реализующий LogEventFactory
). Несмотря на то, что это рабочее решение, я не думаю, что это хорошее решение, поскольку поиск данных в больших строках каждый раз будет стоить дорого.
Есть ли способ, с которым я еще не сталкивался, чтобы решить мою проблему? Является ли подход с %replace
правильным? Если да, то как?